我正在尝试熟悉我正在做的一个项目的 PHP 的 flush() 函数,我自己编写了一些脚本,并将它们上传到我拥有的一些网络空间;但似乎它们都不起作用。我从 PHP.net 上的评论中选择了下面的一个并尝试了它:
<?php
header( 'Content-type: text/html; charset=utf-8' );
echo 'Begin ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
echo $i . '<br />';
flush();
sleep(1);
}
echo 'End ...<br />';
显然脚本仍然不起作用。
然后我读了一条评论说:
如果您调用 ob_flush() 和 flush() 并且仍然没有刷新缓冲区,这可能是因为某些防病毒软件(在这种情况下为 Panda)会保留缓冲区,直到页面完成加载后再将其发送到浏览器。
所以我决定在我使用 Linux(Ubuntu 12.04)的机器上请求该网页,因为它没有安装任何防病毒软件;它工作得很好!
不知道是不是和杀毒软件有关?或者 Windows 中阻止 flush() 实现其预期目的的其他一些奇怪机制,我在两台机器上使用相同的浏览器(Firefox 14.0.1)所以我怀疑它可能是这样的。
所以我想我真正的问题是:有没有人知道防病毒软件阻止 flush() 实现其预期目的(因为我似乎无法在网上找到任何关于它的信息)?如果是这样,有什么办法可以绕过它?
编辑:澄清一下,我很肯定这不是服务器端,我有一个运行 Linux 的外部 Web 服务器,我没有在 Linux 或 Windows 机器上本地托管这些脚本。
EDIT2:我在 Linux 笔记本电脑上的一个朋友家中尝试了这个,我设法让它在我家工作,奇怪的是刷新代码在他们家也没有工作(相反,它只需要很长时间才能加载并且所有都出来了一次)这很奇怪,因为它可以在我家的这台笔记本电脑上运行,我不确定路由器是否与 flush() 函数的工作有关(我真的在网上找不到任何关于此的内容),因为那是我唯一能想到的可能会干扰它。
否则我试图自己解决这个问题没有任何进展,这绝对与服务器端无关,这很奇怪,因为我似乎找到的大多数信息都在谈论服务器是 flush() 时的问题功能不工作:/
巧合的是,我也在我家的一台运行 Norton(而不是 AVG)的 PC 上尝试了这个,它可以工作,但不是 100%。