我正在尝试使用php中的for循环将行插入MySQL数据库。我想要的是在完成操作时回显正在插入的特定行名。我尝试了冲洗方法,但没有成功,甚至没有ob_flush。

然后,我在这里搜索了解决方案,发现了一些解决方案,尝试了所有方法,但是当整个脚本完成时,我仍然立即获得全部输出...

我的代码看起来像这样(我添加了一些我在网上找到的行可以解决该问题,但是仍然没有运气,在下面的代码中,我删除了mysql的东西,因为它可以正常工作,数据已写入db):

<?php
 header( 'Content-type: text/html; charset=utf-8' );
 ob_implicit_flush(true);
 ob_end_flush();
 $con=mysqli_connect("...");
?>

<html>
<body>

<?php
for($d=1;$d<=5;$d++){
 echo "$d";
 echo str_repeat(' ', 4096);
 ob_flush();
 flush();
 $query = "...";
 mysqli_query($con,$query);
}

</body>
</html>


在这种情况下,脚本当然会立即运行,但是在实际情况下,每个循环实际上需要花费一些时间来执行其中的工作,因此在大约10秒钟后一切都完成之后,我得到了最终的回声。我想在每次for循环迭代后回显它,即大约每2s

最佳答案

下面的代码对我有用。但是,起初似乎没有用,因为一长串空格将错开的响应推向右侧,而我看不到这些响应。

请参见下面的THIS LINE HERE

<?php

$db_host = '...';
$db_user = '...';
$db_pass = '...';
$db_name = '...';

$con = new mysqli(
    $db_host,
    $db_user,
    $db_pass,
    $db_name
);

if ($con->connect_error) {
    echo "$con->connect_error";
    exit;
}

for ($d = 1; $d <= 5; $d++){
    echo $d;
    echo str_repeat(' ', 4096);
    echo PHP_EOL; // <<< THIS LINE HERE

    ob_flush();
    flush();

    $query = "SELECT SLEEP(5)";

    mysqli_query($con, $query);
}


这个(简单的测试)也可以:

for ($i = 0; $i < 6; $i++) {
    echo "$i is run." . PHP_EOL;

    ob_flush();
    flush();

    sleep(10);
}


因此,创建一个独立页面,将以上内容粘贴到其中,并填写数据库详细信息。然后运行它,看看是否得到输出。如果这样做,那么您未包含的代码就会有一些(相似或其他)问题。如果不是,则服务器的配置可能会以某种方式阻止其运行。

不过,首先,请尝试使用更简单的版本,然后从那里开始。这也是一个不错的入门:

http://www.sitepoint.com/php-streaming-output-buffering-explained/

关于php - 冲洗甚至冲洗不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29851570/

10-11 08:29