PHP flush 在 IIS7.5 中停止刷新

标签 php iis-7.5

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

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

最大的优点是您可以编辑所有内容的属性,不仅是 PHP,而且您可以使用不同版本的 PHP(甚至是同一版本的安装)。

HTH

关于PHP flush 在 IIS7.5 中停止刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7178514/

相关文章:

php - 在 Android 上注册并使用 PHP、MySQL 和 SQLite 保存在数据库中

php - 在 php 中使用时区标识符从 unix 时间戳返回本地时间

asp.net - IIS 7.5/ASP.NET - 匿名访问除一个目录之外的所有内容 - 如何?

c# - 运行 32/64 位 Web 应用程序

asp.net - 在 .NET2 站点下运行 IIS .NET4 应用程序

asp.net - IIS 7.5 - 403 禁止访问

php - 如何解析日志文件并将数据加载到数据库中

php - 通过点击加载帖子

php - Composer 使用了错误的 php 版本,但是 php -v 显示了正确的版本 (Ubuntu)

asp.net - IIS 7经典模式自定义HttpModule中的Set-MaxAge