为什么flush()不能用于for循环? (PHP)

时间:2014-03-22 19:07:39

标签: php flush

我想在flush()中使用for loop函数,在每个循环后回显内容 我的代码是:

<?php
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i<10; $i++){
        echo "<br> Line".$i." to show.";
        ob_flush();
        flush();
        sleep(2);
}

echo "<br>Done.";

ob_end_flush();
?>

此代码适用于localhost和其他主机( Demo )但不适用于我的主要主机( Demo + {{3} })

我怎么能解决这个问题?我用chrome

3 个答案:

答案 0 :(得分:1)

第二台服务器前面有一个»varnish«代理。它扰乱了脚本的时间安排。在返回响应时,通常不应该依赖于计时,正是因为可能存在代理服务器。您可能希望使用某种pollingWebSockets代替。

$ nc shoma.info 80
GET /test/1.php HTTP/1.1
Host: shoma.info
Connection: close

HTTP/1.1 200 OK
Server: Apache
X-Powered-By: PHP/5.3.28
Vary: Accept-Encoding
Content-Type: text/html
Content-Length: 209
Accept-Ranges: bytes
Date: Sat, 22 Mar 2014 19:18:40 GMT
X-Varnish: 972965439
Age: 0
Via: 1.1 varnish <------- this is the problem
Connection: close

<br> Line 0 to show.<br> Line 1 to show.<br> Line 2 to show.<br> Line 3 to show.<br> Line 4 to show.<br> Line 5 to show.<br> Line 6 to show.<br> Line 7 to show.<br> Line 8 to show.<br> Line 9 to show.<br>Done.

BTW:我的Firefox在这里甚至没有显示你的第一台服务器的“动画”。所以你甚至不能依赖浏览器显示它。

答案 1 :(得分:1)

PHP配置中的问题。

output_buffering - 是PHP配置文件php.ini中的参数。它为数据启用输出缓冲。

在您的PHP配置中,它具有&#39; 无价值&#39;。因此,只需设置 output_buffering 参数&#39; 开启&#39;。或者,如果您希望在此指令中设置一些限制来缓冲数据集的字节数(例如&#39; 4096&#39;)。

答案 2 :(得分:0)

尝试在开头设置:

ini_set('implicit_flush', true);

Source here