PHP flush()显然可以在我的Linux机器上运行,但不能在我的windows机器上运行?

PHP flush()显然可以在我的Linux机器上运行,但不能在我的windows机器上运行?,php,http,browser,buffer,Php,Http,Browser,Buffer,我正在尝试为我正在做的一个项目熟悉PHP的flush()函数,我自己编写了一些脚本,并将它们上传到我自己的一些网站上;但似乎它们都不起作用。我从PHP.net上的一条评论中找到了下面的一条,并尝试了它: <?php header( 'Content-type: text/html; charset=utf-8' ); echo 'Begin ...<br />'; for( $i = 0 ; $i < 10 ; $i++ ) { echo $i . '<b

我正在尝试为我正在做的一个项目熟悉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 />';

有几种情况会阻止立即显示输出,包括:

  • 从PHP内部进行缓冲(这是
    flush
    所阻止的)
  • 缓冲以积累足够的数据进行压缩(启用压缩时)
  • web服务器上的缓冲(可能出于任何原因决定这样做)
  • 浏览器内部的缓冲(浏览器使用各种技术,使页面加载对最终用户来说“感觉很快”;这些技术包括不总是在内容可用时立即显示内容)
由于
flush
无法控制此列表中的所有内容,因此无法保证您的程序将按预期运行

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

刷新PHP的写缓冲区以及PHP使用的任何后端(CGI、web服务器等)。这将尝试将电流输出推到所有位置 使用浏览器的方式,并附带一些注意事项

flush()可能无法覆盖web服务器的缓冲方案,并且它对服务器中的任何客户端缓冲都没有影响 浏览器它也不会影响PHP的用户空间输出缓冲 机制。这意味着您必须同时调用ob_flush()和 flush()刷新ob输出缓冲区(如果正在使用这些缓冲区)

一些服务器,特别是Win32上的服务器,仍然会缓冲脚本的输出,直到它在传输结果之前终止 到浏览器

Apache的服务器模块(如mod_gzip)可能会自行进行缓冲,这将导致flush()无法发送数据 立即通知客户

甚至浏览器也可能在显示输入之前对其进行缓冲。例如,Netscape会对文本进行缓冲,直到它接收到行尾 或者标记的开头,直到 可以看到最外层表的标记

某些版本的Microsoft Internet Explorer只有在收到256字节的输出后才会开始显示页面,因此 可能需要在刷新之前发送额外的空格来获取这些内容 浏览器来显示页面


我知道这肯定是客户端,而不是服务器端,但在Linux下的Firefox中呈现相同的页面时效果很好,但在Windows下就不好了。这让我觉得这也不是一个与浏览器相关的问题。这似乎消除了引用中的所有解释:/@SeanDunwoody:你怎么知道它不是服务器端?服务器是每个操作系统下的不同程序。浏览器也是一样。不,对不起,我想你误解了,我有一个运行linux的服务器,我也不是本地的machine@SeanDunwoody:是的,我以为你在这两种情况下都是在本地运行服务器。不用担心,我想我应该在我最初的问题中更清楚一点。