nginx+factcgi 下使用 ob_flush

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 . \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/

2010-03-08 11:45 121 buffer fastcgi nginx ob_flush php