PHP实时回显 实时输出结果的方法 实时反馈结果到浏览器

  • 内容
  • 相关
正常PHP在执行的时候,要等全部执行完毕才会输出结果,这样其实用户体验很差,其实可以实现实时回显。
PHP实时回显 实时输出结果的方法 实时反馈结果到浏览器.jpg
PHP实时回显 实时输出结果的方法 实时反馈结果到浏览器

PHP 里开启实时输出方法是 ob_implicit_flush() ,但它大部分情况下都不管用,因为 php.ini 配置里 output_buffering 输出缓冲大部分是 On 开启的,还有 zlib.output_compression 也经常会被开启,除了 PHP 这一层,还有 Nginx 的缓冲设置 proxy_buffering ,和压缩 gzip 也大都是开启的。为了一两个页面的需求,修改整个服务器的网站配置,恐怕没有人会做这种选择。

这里推荐一下简单的方法:

set_time_limit(0);
ob_end_clean();
ob_end_flush();//关闭缓存
ob_implicit_flush();
echo str_repeat(" ",1024);//部分浏览器需要多于1024字节才开始输出因此这里先产生1024个空格
header('X-Accel-Buffering: no');// 关键是加了这一行。
echo '现在是:'.date('H:i:s').'<br>';
sleep(5);
echo '五秒后:'.date('H:i:s');
案例1:实时输出shell脚本日志,将shell脚本输出内容重定向到一个日志文件,再实时输出:

set_time_limit(0);
ob_end_clean();
ob_implicit_flush();
header('X-Accel-Buffering: no');// 关键是加了这一行。
   
while(exec("/home/web/a.sh >>/home/web/a.log 2>&1 &"){
   
        $log = file_get_contents('/home/web/a.log');//这里log你可以把每一行都存入数组,然后每次只echo新的行。
        echo "最新一行";
}

本文标签:

版权声明:若无特殊注明,本文皆为《踏雪寻梅》原创,转载请保留文章出处。

本文链接:PHP实时回显 实时输出结果的方法 实时反馈结果到浏览器 - https://www.taxue123.com/post-997.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注