即使是冲洗也不能正常工作

时间:2015-04-24 15:30:15

标签: php html mysql google-chrome

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

然后我在这里搜索了解决方案并找到了一些,尝试了所有内容,但是当整个脚本完成后我仍然可以立即获得输出...

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

<?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

1 个答案:

答案 0 :(得分:0)

以下代码适合我。然而,它起初并不是似乎,因为长长的空间将错开的响应推向右边,在那里我看不到响应。

请参阅下面的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/