2010-06-24 161 views
1

我需要显示从我的PHP脚本连续输出。该脚本将停留在从设备打印日志数据并进入休眠状态的循环中。我的问题是,在脚本完成之前,我无法让PHP或Apache输出数据。停止PHP输出缓冲

我已经尝试了用于刷新输出缓冲区的所有命令,并且我已经通过配置文件读取了PHP和Apache寻找某种类型的缓冲以禁用的配置文件。

这是可能与Apache和PHP在Windows上,或者我应该考虑一些其他平台?

回答

3

的最好方法(最可靠和最干净的)来完成,这是使用服务器端脚本做的工作,和一个客户端AJAX脚本,它将轮询另一个将返回状态的服务器端脚本。在网络中,数据在不同层次上进行缓冲,以实现优化,因此很难实现您想要的。

+0

是的,我一直在考虑客户端轮询,但我试图避免不必要的延迟,但如果没有其他可行的办法,我会采取这种方法。 – Torstein 2010-06-24 06:50:57

+1

相反,这应该会给你的客户一个更好的表现,而不是一个更坏的表现:如果你遵循你的方法,你永远不会确定文本何时被输出,因为它将取决于浏览器的实现。与AJAX方法相反,如果您以1秒的间隔进行轮询,则您将确保客户端每隔1秒更新一次,这对任何Web用户都应该足够好。 – Palantir 2010-06-24 06:59:02

+0

好的,有道理。我会尝试这种方法,谢谢。 – Torstein 2010-06-24 07:03:47

0

PHP的output_buffering默认情况下设置为0(即关闭),但您毫无疑问会对此进行调查。

我认为@Palantir's suggestion可能是一个很好的方法:将日志条目写入本地文件,然后将该文件(或其部分)提供给客户端;客户可以重新请求,但是您经常需要。这也有一个好处,就是不会填满浏览器的缓冲区(也就是说,你不应该只是不停地发送日志数据到客户端无限)。

但这不是你的问题。

你能用如下简单的脚本重现输出缓冲问题吗?

<?php 
while (TRUE) 
{ 
    echo 'x'; 
    flush(); 
    sleep(1); 
} 
?> 
+1

我已经尝试过这样一个简单的脚本,但它不会给我任何输出。 – Torstein 2010-06-24 08:14:36