我不知道如何命名这个线程,对不起。
我有一个处理一些日志的脚本,在这个过程中我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();
此外,在每个echo
或print
之后使用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上不起作用!