我认为flush();至少可以使用Google/Stackoverflow告诉我的功能,但是在我的Windows WAMP(Windows,Apache,MySQL,PHP)系统上,它不起作用.
是否有一些PHP设置我必须设置为使flush()工作?
这是我的代码:
<?php
echo "Fun";
flush();
sleep(5);
echo "<br>Mo";
?>
Run Code Online (Sandbox Code Playgroud)
当脚本完成执行时(5秒后),代码只会输出所有内容.我不想要这个,我希望'Fun'立即显示,然后在5秒后'Mo'.
我已经尝试了其他类似的冲洗,ob_end_flush(); or ob_implicit_flush(true);但没有任何工作.有任何想法吗?
这就是我发现的:
Flush在Apache的mod_gzip或Nginx的gzip下不起作用,因为从逻辑上讲,它正在压缩内容,为此,它必须缓冲内容以对其进行gzip.任何类型的Web服务器gzipping都会影响这一点.简而言之,在服务器端,我们需要禁用gzip并减少fastcgi缓冲区大小.所以:
在php.ini中:
.output_buffering =关闭
.zlib.output_compression =关闭
在nginx.conf中:
.gzip off;
.proxy_buffering off;
也有这些线,特别是如果你没有访问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);
}
Run Code Online (Sandbox Code Playgroud)
该脚本在CLI中运行良好,显示"Fun",在显示"<br> Mo"之前等待5秒.
对于浏览器,结果可能有点不同,因为:
要解决1)使用text/plain内容类型进行测试; 2)需要换行,所以做一个echo "Fun\n";和echo "<br>Mo\n";你当然不会是使用text/plain的真正的HTML数据.
| 归档时间: |
|
| 查看次数: |
13265 次 |
| 最近记录: |