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

解决方案 »

  1.   

    打开nginx.conf文件。在你的location域中设置:gzip off;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 256 1k;
    实时输出取决于两方面:
    一个是response的字节数要超过web server缓冲区的大小。
    还有一个是要超过浏览器的缓冲区大小。所以你str_repeat();的字节数尽量大一些。我看你设置1024*其实已经很大了。估计是你的gzip没关或者fastcgi的缓冲区设置的太大了。
      

  2.   

    那你看看gzip是否关闭吧,这个是必须关闭的,否则绝对出不来。
    关于缓冲区大小的参数,如果实在不想改,response时填充的字符大于这里的设置就应该可以了。很多人都说这个在apache上很好实现,在nginx上没成功实现过。不过我在本机测试确实成功过。
      

  3.   

    弱弱的问,这个gzip的关闭可以在程序实现吗?还是必须nginx修改配置文件?