PHP有些程序执行时间很长,如果不及时输出,那么用户就一直看到的是空白,以为网站没有反应,也不知道现在在执行什么,需要及时输出给用户一些提示,展示现在正在做什么。PHP的输出缓存多层次控制,关键是从PHP到服务器之间的返回要及时输出,而非缓存到执行完毕。
如果web服务器使用的nginx,需要关闭gzip,proxy_buffering。最终才能及时输出
In nginx.conf:
. gzip off;
. proxy_buffering off;
在代码中设置及时输出 并开启
@ini_set('implicit_flush',1);
ob_implicit_flush(1);
清除缓存内容
@ob_end_clean();
浏览器有缓存机制,如果收到内容少于1024个字节也不会及时输出,所以每次输出要保证输出内容达到1024个字节以上
测试代码
<?php
@ini_set('implicit_flush',1);
ob_implicit_flush(1);
@ob_end_clean();
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);
}
切记 每一次的输出必须大于1024个字节