我们一直在使用php flush一旦点击它就立即"空白"页面,并且还发送页面的导航和主要组件,以便页面几乎立即出现,即使有时内容可能需要很长时间载入.
这一直很好.
最近我们从IIS 7.0升级到7.5,现在flush不起作用.在调查问题时,我们已关闭静态和动态文件的压缩.我们还关闭了输出缓存.
我们还关闭了zlib压缩并在php.ini中输出缓冲.
为了测试问题,我们有以下脚本
@ini_set("output_buffering", "Off");
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
ob_start();
echo "starting...<br/>\n";
for($i = 0; $i < 5; $i++) {
print "$i<br/>\n";
ob_end_flush();
ob_flush();
flush();
ob_start();
sleep(2);
}
print "DONE!<br/>\n";
Run Code Online (Sandbox Code Playgroud)
浏览器只显示加载状态(无论在任何浏览器中,在IE中它看起来像一个Ajax动画gif,在Firefox中,标签会显示"正在连接...")10秒钟,然后突然显示整个输出.
我们根据本网站上的类似问题尝试了flush和ob_flush以及ob_end_flush的各种组合.他们都没有工作.有没有办法让IIS/PHP刷新数据?
小智 30
还有另一种使用IIS管理器设置响应限制的方法:
最重要的是,您可以编辑所有内容的属性,不仅可以使用PHP,还可以使用PHP的不同版本(甚至是相同版本的安装).
HTH
必须将所需处理程序的ResponseBufferLimit值设置为足够低的数字才能实际刷新.我建议使用0,因为它可以防止IIS执行任何操作,但是传递从PHP脚本发送的内容.您可以使用以下命令行将PHP处理程序的ResponseBufferLimit设置为0(只需将"NAME"更改为您要更新的处理程序的名称,例如PHP53_via_FastCGI):
appcmd.exe set config /section:handlers "/[name='NAME'].ResponseBufferLimit:0"
Run Code Online (Sandbox Code Playgroud)
或者,您可以直接编辑applicationHost.config并添加XML元素的ResponseBufferLimit属性.