【问题标题】:How to make PHP flush() work on Azure web apps?如何使 PHP flush() 在 Azure Web 应用程序上工作?
【发布时间】:2021-11-23 08:48:56
【问题描述】:

这个简单的脚本可以在运行在 VM/Azure 上的 LAMP 服务器 (Ubuntu) 上毫无问题地运行。但是,当移植到 Azure Web 应用程序 (php) 时,相同的脚本会在 5 分钟后出现 502504 错误,并且不会显示任何输出。如果行数减少到少于 300 行(大约 5 分钟时间),它将运行,但只有在脚本结束时才会出现所有行。 有什么想法吗?

ini_set('max_execution_time', 0);
for($i=0;$i<600;$i++)
{
    echo 'printing...'.$i."<br>";
    ob_flush();
    flush();
    sleep(1);
}

【问题讨论】:

  • 我不是 100% 确定,但您应该在 echo 中添加 \n 或 PHP_EOL。
  • 如果您在处理过程中没有获得数据,那么这意味着您位于反向代理后面,该代理肯定可以保护后端免受攻击,并且能够在您的 Web 应用发送数据时缓存数据关于 Cache-Control 的 HTTP 标头。一些反向代理确实处理了一种“管道”模式,只是在客户端和后端之间打乱字节,但这必须配置。如果 Azure 在你的 PHP 前面有这个软件,我会试着阅读一下。通常情况下,我有一个使用 PHP 脚本传输大文件的案例。我前面有 Varnish,但管理了一个 VCL conf。
  • 感谢 Markus,但 EOL 没有解决问题。

标签: php azure web flush


【解决方案1】:

先生。 Iwasa 找到了解决方案并将其发布在这里:https://docs.microsoft.com/en-us/answers/questions/578408/how-to-make-php-flush-work-on-azure-web-apps.html?childToView=578568#answer-578568 这个问题是由我决定使用 PHP 8.0 引起的。这将导致使用 Nginx 而不是 Apache(在 Azure Web 应用程序中 - PHP)。 只需将 PHP 8 替换为 7.4 即可解决 5 分钟超时和 flush() 不起作用的问题。 希望这对其他人有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多