我正在尝试熟悉我正在执行的项目的PHP的flush()函数,我自己编写了一些脚本,然后将它们上传到我拥有的某些Web空间中;但似乎他们都不起作用。我从对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 />';

显然脚本STILL无法正常工作。

然后,我读到一条评论说:



因此,我决定在使用Linux(Ubuntu 12.04)的计算机上请求该网页,因为该计算机未安装任何防病毒软件;而且效果很好!

我不知道这是否与防病毒软件有关?或Windows中其他一些阻止flush()实现其预期目的的奇怪机制,我在两台计算机上都使用了相同的浏览器(Firefox 14.0.1),因此我怀疑可能是这样。

所以我想我的真正问题是:是否有人对防病毒软件有任何了解,无法阻止flush()实现其预期目的(因为我似乎无法在线找到有关它的任何信息)?如果是这样,有什么办法可以解决?

编辑:为了明确起见,我确定这不是服务器端,我有一个运行Linux的外部Web服务器,我不在Linux或Windows Machine上本地托管这些脚本。

EDIT2:我在Linux笔记本电脑上的一个 friend 住所附近尝试了这个,我设法使其在我的住所上正常工作,奇怪的是,刷新代码在他们的住所也没有起作用(相反,加载它花了很长时间,并且全部在一次)(这很奇怪,因为它可以在我家里的笔记本电脑上使用),所以我不确定路由器是否与flush()函数正常工作有关(我真的在网上找不到任何东西),因为那是我唯一想到的可能会干扰它。

否则,我自己尝试解决此问题没有任何进展,这绝对与服务器端无关,这很奇怪,因为我似乎发现的大多数信息都在谈论当flush()时服务器是问题。功能不起作用:/

巧合的是,我还在家里运行Norton(而不是AVG)的PC上尝试了此功能,但效果并不理想,但并非100%。

最佳答案

有几件事可能会阻止立即显示输出,包括:

  • 从PHP内部缓冲(这是flush阻止的)
  • 缓冲以便累积足够的数据进行压缩(启用压缩时)
  • Web服务器上的缓冲(无论出于何种原因,它都可能决定这样做)
  • 在浏览器中缓冲(浏览器使用各种技术,以便页面加载“快速”地到达最终​​用户;这些技术包括并不总是在内容可用时就立即显示内容)

  • 由于flush无法控制此列表中的所有内容,因此实际上不能保证程序会按预期运行。

    所有这些都在flush的注释中提到:

    关于PHP flush()显然可以在我的Linux机器上工作,但不能在我的Windows机器上工作吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11816815/

    10-10 23:14