我需要显示我的 php 脚本的连续输出。该脚本将停留在从设备打印日志数据并处于睡眠状态的循环中。我的问题是在脚本完成之前我无法让 PHP 或 Apache 输出数据。
我已经尝试了所有用于刷新输出缓冲区的命令,并且我已经阅读了 PHP 和 Apache 的配置文件,以寻找某种类型的缓冲来禁用。
这可能与 Windows 上的 Apache 和 PHP 有关,还是我应该考虑其他平台?
我需要显示我的 php 脚本的连续输出。该脚本将停留在从设备打印日志数据并处于睡眠状态的循环中。我的问题是在脚本完成之前我无法让 PHP 或 Apache 输出数据。
我已经尝试了所有用于刷新输出缓冲区的命令,并且我已经阅读了 PHP 和 Apache 的配置文件,以寻找某种类型的缓冲来禁用。
这可能与 Windows 上的 Apache 和 PHP 有关,还是我应该考虑其他平台?
完成此任务的最佳方法(最可靠和最干净)是使用完成工作的服务器端脚本和客户端 AJAX 脚本,该脚本将轮询另一个将返回状态的服务器端脚本。在网络中,数据被缓存在不同的层次上,以达到优化的目的,因此很难做到你想要的。
使用这些刷新您已经使用过的输出缓冲区命令,并输入一个 1024 字节长的 HTML 注释。因为它很可能是浏览器问题,而不是服务器问题。
啊,看起来您正在寻找COMET应用程序
PHP 的output_buffering
默认设置为 0(即关闭),但毫无疑问您已经对此进行了调查。
我认为@Palantir 的建议可能是一个不错的建议:将日志条目写入本地文件,然后将该文件(或其部分)提供给客户端;客户可以根据您的需要经常重新请求。这还具有不填满浏览器缓冲区的优点(即,您不应该只是无限期地向客户端发送日志数据)。
但这不是你的问题。
您可以使用如下所示的简单脚本重现输出缓冲问题吗?
<?php
while (TRUE)
{
echo 'x';
flush();
sleep(1);
}
?>