当你在处理一个过程需要耗时很长,但你又需要适时的知道程序当前的处理状况的时候,该怎么办呢?下面就分享一下如何使用php及时的输出当前结果到浏览器而不刷新整个页面的效果吧。
应用场景:如安装数据库,实时显示每一步信息,如1.数据库创建成功...2.user表创建成功...3.用户user1插入成功...
再比如执行消耗 job,需要查看执行过程等。
PHP 里开启实时输出方法是 ob_implicit_flush() ,但它大部分情况下都不管用,因为 php.ini 配置里 output_buffering 输出缓冲大部分是 On 开启的,还有 zlib.output_compression 也经常会被开启,除了 PHP 这一层,还有 Nginx 的缓冲设置 proxy_buffering ,和压缩 gzip 也大都是开启的。为了一两个页面的需求,修改整个服务器的网站配置,恐怕没有人会做这种选择。
上边提到输出缓存:php脚本实时输出的问题,一般情况下一个php脚本在全部执行完毕后,才会将脚本输出一次性返回,
而在执行过程中的输出内容是没有办法实时获取的,这种行为叫输出缓存。
这里推荐一下简单的方法:
set_time_limit(0);
ob_end_clean();
ob_implicit_flush();
header('X-Accel-Buffering: no'); // 关键是加了这一行。
echo '现在是:'.date('H:i:s').'<br>';
sleep(5);
echo '五秒后:'.date('H:i:s'

本文介绍了如何在PHP中实现实时输出内容到浏览器,适用于长耗时任务的进度显示,例如数据库安装或执行job。由于PHP的输出缓冲和服务器配置,直接使用ob_implicit_flush()可能无效。为解决此问题,建议采用将shell脚本日志实时写入文件,然后读取并显示的方式,避免全局配置改动。
最低0.47元/天 解锁文章
1052

被折叠的 条评论
为什么被折叠?



