我正在尝试将页面推送到浏览器,同时从PHP脚本生成页面。我无法访问我的托管服务提供商的nginx配置,但他们告诉我他们使用的是nginx 1.8.1。在我的phpinfo()
输出中,我可以看到
output_buffering 0 0
并且相同的脚本在我的本地PC上按预期工作。
这是我的开始脚本:
<pre>
<?php
for ($i = 0; $i < 100; ++$i) {
print('<b>.</b>');
flush();
usleep(100000); // 0.1 second
}
?>
</pre>
我立即开始在我的本地电脑上获得输出,但是当我从托管中访问该页面时,我必须等待整整10秒才能看到任何内容。
这些是默认的响应标头:
HTTP / 1.1 200 OK
服务器:nginx
日期:2016年4月12日星期二12:32:05 GMT
内容类型:text / html;字符集= UTF-8
连接:保持活力
变化:接受编码
X-Powered-By:PHP / 5.4.45
内容编码:gzip
如果我添加
<?php
header('X-Accel-Buffering: no');
我得到了
HTTP / 1.1 200 OK
服务器:nginx
日期:2016年4月12日星期二12:35:10 GMT
内容类型:text / html;字符集= UTF-8
连接:保持活力
变化:接受编码
X-Powered-By:PHP / 5.4.45
内容编码:gzip
<?php
header('X-Accel-Buffering: no');
header('Content-Encoding: identity');
HTTP / 1.1 200 OK
服务器:nginx
日期:2016年4月12日星期二12:37:11 GMT
内容类型:text / html;字符集= UTF-8
内容长度:812
连接:保持活力
X-Powered-By:PHP / 5.4.45
内容编码:身份
显然,如果服务器知道内容的长度,它就等待脚本完成,然后再开始将其发送到浏览器。
这些是我本地计算机上的标题:
HTTP / 1.1 200 OK
日期:2016年4月12日星期二12:52:31 GMT
服务器:Apache / 2.4.7(Win32)PHP / 5.4.45 OpenSSL / 1.0.1e
X-Powered-By:PHP / 5.4.45
X-Accel-Buffering:没有 内容编码:身份
保持活跃:超时= 5,最大= 100
连接:保持活力
内容类型:text / html; charset = utf-8
X-Accel-Buffering
标头被传递,因为我没有在本地运行nginx。
我是否可以通过PHP传递任何其他标头来阻止nginx缓冲内容?到目前为止,我只找到了配置选项,我无权访问。