我们一直在使用 php flush 在点击页面时立即“空白”,并发送页面的导航和主要组件,以便页面几乎立即出现,即使有时内容可能需要加载时间很长。
这一直运作良好。
最近我们从 IIS 7.0 升级到 7.5,现在刷新不起作用。在调查该问题时,我们已关闭静态和动态文件的压缩。我们还关闭了输出缓存。
我们还在 php.ini 中关闭了 zlib 压缩和输出缓冲。
为了测试问题,我们有以下脚本
@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";
浏览器只显示加载状态(无论在任何浏览器中是什么,在 IE 中它看起来像一个 Ajax 动画 gif,在 Firefox 中选项卡将显示“正在连接...”) 10 秒,然后突然整个出现输出。
我们根据本网站上的类似问题尝试了 flush 和 ob_flush 以及 ob_end_flush 的各种组合。它们都不起作用。有什么方法可以使 IIS/PHP 刷新数据吗?
最佳答案
还有另一种使用 IIS 管理器设置响应限制的方法:
- 在服务器主页的“管理”下,选择“配置编辑器”;
- 在“部分”下,输入“system.webServer/handlers”;
- 在“(集合)”旁边单击“...”或标记元素“(集合)”,然后在“操作”和“(集合)”元素下,单击“编辑项目”;
- 向下滚动,直到在“名称”下找到您的 PHP 版本;
- 在底部,显示了可以手动编辑的属性,包括 responseBufferLimit,应将其设置为 0 才能使 flush() 工作。
最大的优点是您可以编辑所有内容的属性,不仅是 PHP,而且您可以使用不同版本的 PHP(甚至是同一版本的安装)。
HTH
关于PHP flush 在 IIS7.5 中停止刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7178514/