服务器忽略 PHP 输出缓冲区设置

服务器忽略 PHP 输出缓冲区设置

我一直尝试根据需要将某些脚本的输出刷新到浏览器,但它们在我们的生产服务器上不起作用。

例如,我尝试运行“Phoca Changing Collat​​ion 工具”(在 Google 上找到它),直到脚本执行完毕我才看到任何输出。

我尝试过立即刷新其他脚本的缓冲区,这些脚本在任何服务器上都可以正常工作,但这个脚本使用以下代码:

echo "something";
ob_flush();
flush();

设置“ob_implicit_flush(1);”也无济于事。

该服务器是 Apache 2.2.21,在 Linux 上运行 PHP 5.2.17。如果有帮助的话,您可以在此处查看我们的 php.ini 文件: http://www.smallfiles.org/download/1123/php.ini.html

这不是我们在服务器忽略脚本指令时遇到的唯一问题。服务器还会忽略超时代码,例如:

ini_set('max_execution_time', 900*60);

set_time_limit(86400);

脚本总是在 php.ini 默认设置下超时。

脚本是在 IE 还是 Firefox 中执行似乎并不重要。

尝试了“ini_set('zlib.output_compression_level', 'Off');”,并检查了 php.ini 文件中的“Off”状态。代码“apache_setenv('no-gzip', 1);”导致致命错误,因此尝试使用“mod_gzip_on No”指令上传 .htaccess 文件。但都没有用。

尝试以 fcgi 和 suphp 的形式运行 Apache,但结果相同。

服务器未处于安全模式。

拔掉我的头发!

答案1

为了解决输出缓冲区问题,我需要关闭 .htaccess 文件内的 gzip 压缩。

为了解决超时问题,我检查了我的 Apache 日志文件,发现问题不是 PHP,而是 Apache 配置:指定的超时已过期:ap_content_length_filter:apr_bucket_read() 失败

必须增加 Apache 超时才能防止出现此问题。这显然是由于 Apache 在超时重置之前等待更多内容到达缓冲区而引起的。

相关内容