nginx+factcgi 下使用 ob_flush

转载时请标明文章原始出处和作者信息, 作者: lostsnow.
http://www.lsproc.com/blog/use_ob_flush_on_nginx_fastcgi/

Nginx与php-cgi是两个独立的程序,通过TCP或Unix套接字通信,不像Apache那样是集成在一起的。所以,Nginx有fastcgi 缓冲区,数据超出缓冲区大小、或程序执行完,才会将内容输出到客户端。如果要使用ob_flush,不能开启gzip压缩输出。

nginx.conf:

fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
gzip off;

php.ini:

output_buffering = Off
<?php
set_time_limit(0);
ob_end_clean();
ob_implicit_flush(1);

for($i = 0; $i < 10; $i++)
{
    echo $i . "<br />\n";
    echo str_repeat(' ', 1024*4);
    sleep(1);
}

其中 echo str_repeat(' ', 1024*4);
使得fastcgi_buffer_size 4k; 的缓冲区满,从而输出内容到浏览器

参考: http://blog.s135.com/nginx_php_v6/2/1/

-- EOF --