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 相同。:-)
如标题所述,我在 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 相同。:-)