在脚本中,服务器忽略了 PHP 输出缓冲区设置


In script PHP output buffer settings ignored by server

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

例如,我尝试运行"Phoca 更改排序规则工具"(在 Google 上找到它),但在脚本完成执行之前我看不到任何输出。

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

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

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

服务器是Apache 2.2.21,PHP 5.2.17在Linux上运行。你可以在这里看到我们的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中执行似乎并不重要。

解开了这个谜团。他们两个。

为了解决输出缓冲区问题,我需要关闭 .htaccess 文件中的 gzip 压缩,尽管我希望我可以在脚本中执行此操作。

以下是您应该放入 .htaccess 文件的内容:

<IfModule mod_gzip.c>
    mod_gzip_on  No
</IfModule>
SetEnv no-gzip dont-vary

为了修复脚本终止而没有错误,我检查了我的Apache日志文件,发现它不是PHP,而是在Apache配置中:指定的超时已过期:ap_content_length_filter:apr_bucket_read() 失败

必须增加 Apache 超时以防止此错误使我的脚本看起来像超时。在Apache中启用KeepAlive也有助于一劳永逸地解决这个问题。

希望这对某人有所帮助,并感谢其他人的帮助!

您可能加载了不正确的php.ini文件,因为它往往会根据目录而变化。

要检查加载的php.ini文件,请写入:echo php_ini_loaded_file(); ,这将为您提供它所在的目录。 请参阅 php.net

如果失败,请参阅服务器堆栈交换站点的 serverfault.com。