PHP刷新在IIS7.5中停止刷新

Jef*_*vis 7 php iis-7.5

我们一直在使用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管理器设置响应限制的方法:

  1. 在服务器主页面的"管理"下,选择"配置编辑器";
  2. 在"Section"下,输入'system.webServer/handlers';
  3. 在"(收藏)"旁边点击"..."或标记元素"(收藏)",然后在"操作"和"收集"元素下,单击"编辑项目";
  4. 向下滚动,直到在"名称"下找到您的PHP版本;
  5. 在底部,显示属性可以手动编辑,包括responseBufferLimit,应该设置为0以使flush()工作.

最重要的是,您可以编辑所有内容的属性,不仅可以使用PHP,还可以使用PHP的不同版本(甚至是相同版本的安装).

HTH

  • +1优秀!这是我第一次看到通过IIS管理器设置responsebufferlimit的解决方案. (2认同)

Jus*_*tin 7

必须将所需处理程序的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属性.