nginx服务器中ob_flush函数和flush函数不起作用的解决方案
做一个逐行输出的功能,使用ob_flush
时试了N种方法不起作用,比如下面的代码:
ob_start(); for(;;) { echo "......."; ob_flush(); flush(); sleep(1); }
谷歌了不少的写法都不行,所以问题应该出在了环境配置上而不是使用方法上。
话说还是stackoverflow
给力,搜索“php flush not working
”找到了一个正确的解决方法:
检查nginx
配置文件(nginx.conf
),禁用nginx
的buffering
:
proxy_buffering off; gzip off; fastcgi_keep_conn on;
要注意最后这句fastcgi
的哦~~
检查php.ini
,禁用buffering
:
output_buffering = off
注意这句配置不能通过ini_set()
函数动态在程序中设置,这在php官方手册
中有说明:
the output_buffering setting is PHP_INI_PERDIR therefore it may not be set using ini_set()
经过上面两步的配置(nginx.conf
和php.ini
)后,重启nginx
就可以了,再次测试文章开头的代码,成功逐行输出。