我有一些脚本,在执行过程中会输出进度信息,因为它们需要长时间运行。每个脚本基本上在处理完每一行数据的循环后都会执行以下操作:
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仍保留在原地。