无法关闭FastCGI输出缓冲

时间:2013-02-17 19:56:17

标签: php fastcgi

此脚本在10秒后输出,而不是逐步输出:

ob_start(); // Start output buffer (if not enabled in php.ini)
for ($i = 0; $i < 10; $i++) {
    echo $i, ' ';
    ob_flush();
    flush();
    sleep(1);
}

我安装了IIS和FastCGI。在PHP.ini中,我有

zlib.output_compression = Off
output_buffering = off

C:\Windows\System32\inetsrv\Config\applicationHost.config我有

<add name="PHP_viaFastCGI" 
path="*.php" 
verb="*" 
modules="FastCgiModule" 
scriptProcessor="C:\php\php-cgi.exe" 
resourceType="Unspecified" 
ResponseBufferLimit = "0"/>

所有看似没有效果。

我需要找到在FastCGI中关闭输出缓冲的正确方法

提前致谢

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,也运行了FastCGI PHP,并通过在我的索引文件中放入以下行来修复它(包括所有其他文件的位置),然后再进行其他操作:

while (@ob_end_flush());

我在PHP docummentation中找到了此命令。

答案 1 :(得分:0)

不了解IIS,但在CentOS中我必须将以下内容添加到/etc/httpd/conf.d/fcgid.conf中:

OutputBufferSize 0

在搜索一小时后找到答案:http://forum.odin.com/threads/mod_fcgid-php-flush-function.91876/

答案 2 :(得分:0)

解决方案在这里:PHP flush - User Contributed Notes

对于使用IIS的Windows系统,WHITENOISE_USE_FINDERS = True 优先于PHP的responseBufferLimit设置。所以你还必须设置 output_buffering低于默认值。

简而言之,对于IIS7 +,请编辑responseBufferLimit文件,然后将%windir%\System32\inetsrv\config\applicationHost.config添加到responseBufferLimit="0"处理程序中。

所以整行看起来像这样:

PHP_via_FastCGI

然后,<add name="PHP_via_FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe" resourceType="Either" responseBufferLimit="0" />ob_flush()将开始按预期工作。