就在昨天,客户提了个要实时进度的要求,然后我想了想,那肯定就是得用上ob_start()了,然而比我想象得麻烦了很多
当时是用了wamp3.1.7 64bit 用的是PHP7.3 和wampmanager 2.0的 用的是PHP5.2,还有个phpstudypro 配了5.2 5.4 7.3 三个php版本
7.2版本的只需要加一行 ob_implicit_flush(1) ,(官网的解释是:打开/关闭绝对刷送,相当于自动在每句echo后面调用flush() )就可以实现实时输出,当然缺不了字符填充:
ob_implicit_flush(1);
echo str_repeat(" ",4096*20);
for($i=0;$i<50;$i++){
sleep(1);
echo $i."<br>";
}
就这么简简单单朴实无华,然后5.4也支持,5.3的是我公司项目使用的,因为zendf框架的原因,显示不出来,只会等全部执行完再一起输出,然后就是在官网.一直找各种函数,说明,最终在zendf框架能出来的方法被试出来了:
ob_start();
echo str_repeat(' ',4069);
echo ob_get_clean();
flush();
for($i = 0; $i < 10; $i++)
{
sleep(1);
echo $i;
echo ob_get_clean();
}
我反正用这种办法就能在5.3上的zend框架实时输出,这也应该是最 原始的吧,先打开输出缓冲ob_start,让脚本将不会输出内容(除http标头外),输出的内容被存储在内部缓冲区中,再从缓存区获取ob_get_clean();然后flush()输出,如此循环。(有时候你把ob_start()去掉也能行,这很你的apache PHP 设置 有关,一般就写上吧)
如果是想显示进度条那种的,可以让他输出JS就行,这个csdn上一搜一大堆不赘述,只是把自己在老版本,老框架上能用的方法分享出来,哪天用空了,可以一起来聊聊这个缓存区
相关 :
最后 中国加油!!!