Azure / 共享 Web 应用程序 / PHP / PhpManager / output_buffering

Azure / Shared Web App / PHP / PhpManager / output_buffering

如标题所述,我在 Azure 中安装了 共享 Web 应用程序 PHP 5.4 以及安装的站点扩展 PhpManager(通过 Kudu)。我已经使用 PhpManager 将主 php.ini 文件和变量 output_buffering 从默认的 4096 修改为 "Off"。

设置保存(绿色勾号),如果您重新访问配置,该设置将保留,但如果您查看 PHP 信息(即使在重新启动实例后),output_buffering 变量不受尊重,它仍然显示 4096,尽管 php.ini 文件配置显示 "Off"

我已经尝试附加到 .user.ini 以及自定义 ini 路径以换行;

output_buffering = Off

此更改仅导致 output_buffering 在 PHP 信息中更改为 "no value" - 但不是所需的 "Off" 结果。

希望得到任何关于禁用此功能的指导 - 我已经尝试了很多 ob_flush() flush() ob_start 等来强制文件内,但没有成功。

顺便说一句,我在下面创建了一个单独的脚本以确保它不是代码问题,并且它仍然一次输出而不是按要求逐步输出。

<?php
echo 'Starting...<br/>';
for($i = 0; $i < 5; $i++) {
  print "$i<br/>";
  flush();
  sleep(2);
}
print 'DONE!<br/>';
?>

干杯,

T

您可以在根目录的 web.config 中自定义一个处理程序映射(如果您没有,只需创建一个新的 web.config)。我们可以利用 responseBufferLimit="0" 来禁用 IIS 中的响应缓冲区。

类似于Use a custom PHP runtime on Azure Web App,但我们将使用默认安装的php cgi 执行应用程序并手动创建配置。

请在您的 web.config 中尝试以下内容:

<configuration>
      <system.webServer>
         <handlers>
            <add name="PHP-FastCGI"
                path="*.php"
                verb="GET,HEAD,POST"
                modules="FastCgiModule"
                scriptProcessor="D:\Program Files (x86)\PHP\v5.4\php-cgi.exe"
                resourceType="Either"
                requireAccess="Script" 
                responseBufferLimit="0" />
         </handlers>
      </system.webServer>
</configuration>

尝试将其设置为 0:

output_buffering = 0

从文档中,您可以看到此配置参数需要一个布尔值或整数。当我测试它时,我只能让它按照我使用 int 时预期的方式运行。

output_buffering boolean/integer

You can enable output buffering for all files by setting this directive to 'On'. If you wish to limit the size of the buffer to a certain size - you can use a maximum number of bytes instead of 'On', as a value for this directive (e.g., output_buffering=4096). As of PHP 4.3.5, this directive is always Off in PHP-CLI.

另一方面,因为默认值为 0,我假设将它设置为无效的东西并看到 "no value" 与将它设置为 0 相同。:-)