我想在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
答案 0 :(得分:1)
第二台服务器前面有一个»varnish«代理。它扰乱了脚本的时间安排。在返回响应时,通常不应该依赖于计时,正是因为可能存在代理服务器。您可能希望使用某种polling或WebSockets代替。
$ 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)