php 刷新不起作用
<?php
for($i=0;$i<20;$i++)
{
echo 'printing...<br />';
ob_flush();
flush();
usleep(300000);
}
?>
包含代码的网址:http://domainsoutlook.com/sandbox/delayed.php
我有一个专用服务器,所以我可以进行更改。我正在运行apache和nginx作为代理服务器。
<?php
for($i=0;$i<20;$i++)
{
echo 'printing...<br />';
ob_flush();
flush();
usleep(300000);
}
?>
包含代码的网址:http://domainsoutlook.com/sandbox/delayed.php
我有一个专用服务器,所以我可以进行更改。我正在运行apache和nginx作为代理服务器。
这就是我发现的:
Flush在Apache的mod_gzip或Nginx的gzip下不起作用,因为从逻辑上讲,它是gzip内容,要做到这一点,它必须缓冲内容以gzip它。任何类型的Web服务器gzipping都会影响这一点。简而言之,在服务器端,我们需要禁用gzip并减小fastcgi缓冲区大小。所以:
在 php.ini 中:
.output_buffering = 关
.zlib.output_compression = 关
在nginx.conf中:
.gzip off;
.proxy_buffering关闭;
手头也有这行,特别是如果你没有访问php.ini:
@ini_set(“zlib.output_compression”,0);
@ini_set('implicit_flush',1);
@ob_end_clean();
set_time_limit(0);
最后,如果你有它,请在下面设置代码:
ob_start(“ob_gzhandler”);
ob_flush();
PHP 测试代码:
ob_implicit_flush(1);
for($i=0; $i<10; $i++){
echo $i;
//this is for the buffer achieve the minimum size in order to flush data
echo str_repeat(' ',1024*64);
sleep(1);
}
您正在使用没有 ,因此没有什么可以冲洗的。ob_flush
ob_start
它还取决于Web服务器和代理及其设置。
您应该禁用Nginx的缓冲(添加到配置文件并重新启动Nginx)proxy_buffering off;
另外,请检查您的 php.ini 是否包含 和 。output_buffering = Off
zlib.output_compression = Off