set_time_limit(0);
ob_implicit_flush();
ob_end_clean();
for($i = 1;$i < 10; $i++){
echo str_repeat(" ", 1024*5);
echo "输出内容$i<br />";
ob_flush();
flush();
sleep(1);
}
这段代码在nginx下失效了,在本地apache能实时输出内容。请问如何解决?运行效果:http://www.56php.com/untitled9.php
ob_implicit_flush();
ob_end_clean();
for($i = 1;$i < 10; $i++){
echo str_repeat(" ", 1024*5);
echo "输出内容$i<br />";
ob_flush();
flush();
sleep(1);
}
这段代码在nginx下失效了,在本地apache能实时输出内容。请问如何解决?运行效果:http://www.56php.com/untitled9.php
fastcgi_buffer_size 256k;
fastcgi_buffers 256 1k;
实时输出取决于两方面:
一个是response的字节数要超过web server缓冲区的大小。
还有一个是要超过浏览器的缓冲区大小。所以你str_repeat();的字节数尽量大一些。我看你设置1024*其实已经很大了。估计是你的gzip没关或者fastcgi的缓冲区设置的太大了。
关于缓冲区大小的参数,如果实在不想改,response时填充的字符大于这里的设置就应该可以了。很多人都说这个在apache上很好实现,在nginx上没成功实现过。不过我在本机测试确实成功过。