我有许多脚本在执行时会回显进度,因为它们运行时间很长。每个基本上在处理的每个循环数据行的末尾都执行以下操作:
echo '.';
@ob_flush();
flush();
这多年来一直运行良好,然后我在多台服务器上升级到 PHP 5.3.x 和 Apache 2.2.x。现在,即使我用空白填充缓冲区或设置“ob_implicit_flush(1)”,我也无法让它显示命令输出。
一台服务器仍然显示输出,但它是成块的。可能需要将近 5 分钟,然后屏幕上突然出现一串点。对于其他服务器,在脚本完全执行完之前我什么也得不到。
我试过查看 php.ini 和 httpd.conf 文件,看看我是否能弄清楚不同服务器之间发生了什么变化,但我显然遗漏了一些东西。
我还尝试在 .htaccess 中为受影响的脚本禁用 mod_deflate,但这也无济于事(禁用 mod_gzip 用于立即解决问题)。
有人可以指出我正确的方向吗?无法实时监控脚本执行会导致各种问题,但我们不能再停留在这些较旧的 PHP 版本上。
在一个更奇怪的方面,我确实尝试将服务器降级到 PHP 5.2.17,但降级后输出缓冲区问题仍然存在。这让我怀疑这与 Apache 处理 PHP 输出的方式有关,因为 Apache 2 保留在原地。