PHP脚本未回显';ing日志实时-正在我的另一台服务器上工作


PHP script not echo'ing logs in real time - Was working on my other server

我不知道如何命名这个线程,对不起。

我有一个处理一些日志的脚本,在这个过程中我echo有很多调试信息。自从移到新服务器后,脚本似乎挂起了30多秒,然后吐出所有日志,然后再次挂起30多秒并继续处理。

这种行为真的很奇怪,我不知道从哪里开始。它不是逐行处理文件,而是分块处理。。。

PHP版本为5.1.6,可在Centosk上运行plesk。(我以前的CP是CPanel)

有什么想法吗?

编辑:我的问题的简单示例-运行此代码:

for ($i=0; $i<100; $i++) {
echo "test $i";
sleep(1);
}

脚本将挂起100秒,然后打印出所有的"测试1"等等。在我的主脚本中需要睡眠,而在另一台服务器上则依次响应这些值。

EDIT2:已尝试设置output_braining=0和implicit_flash=On,但没有帮助。

您可能有output_buffering On。请先尝试禁用它。

您可以在php.ini文件中执行此操作,如果服务器允许,也可以在.htaccess文件中执行,或者在php脚本的开头使用以下代码:

while (ob_get_level()) ob_end_clean();

此外,在每个echoprint之后使用flush(),应该没问题!

更新:您可能还会遇到其他无法在PHP中控制的缓冲区(web服务器、浏览器…),这就是为什么您仍然没有发送任何内容的原因。解决方法是在每次打印后发送一些空白字节:

while (ob_get_level()) ob_end_clean();
for ($i=0; $i<100; $i++) {
    echo "test $i";
    echo str_repeat(' ', 256);
    flush();
    sleep(1);
}

然而,虽然这个例子在IE上对我有效;Firefox,它在Chrome上不起作用!