PHP实时显示进度

就在昨天,客户提了个要实时进度的要求,然后我想了想,那肯定就是得用上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();    //将ob_strat内的数据数获取并清除当前缓冲
        }

我反正用这种办法就能在5.3上的zend框架实时输出,这也应该是最 原始的吧,先打开输出缓冲ob_start,让脚本将不会输出内容(除http标头外),输出的内容被存储在内部缓冲区中,再从缓存区获取ob_get_clean();然后flush()输出,如此循环。(有时候你把ob_start()去掉也能行,这很你的apache PHP 设置 有关,一般就写上吧)

如果是想显示进度条那种的,可以让他输出JS就行,这个csdn上一搜一大堆不赘述,只是把自己在老版本,老框架上能用的方法分享出来,哪天用空了,可以一起来聊聊这个缓存区

相关 :

ob_start
ob_get_contents
ob_implicit_flush
flush
ob_end_clean
ob_end_flush
ob_get_flush

最后 中国加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值