我们平常使用的php通常都是php-fpm,作为api或者页面加载。一般的web框架都是在程序运行完毕之后再输出内容,但是有些情况需要实时输出,比如过长的执行过程需要实时监控进度等。
这时候我们想到了缓冲区
<?php
header("Content-type:text/html;charset=utf-8");
#设置执行时间不限时
set_time_limit(0);
#清除并关闭缓冲,输出到浏览器之前使用这个函数。
ob_end_clean();
#控制隐式缓冲泻出,默认off,打开时,对每个 print/echo 或者输出命令的结果都发送到浏览器。
ob_implicit_flush(1);
$step = 1;
while(1){
echo "the {$step} step";
echo '<bt>';
sleep(1);
$step++;
}
附上缓冲区的介绍
一、概念
在PHP运行的过程中,可以将会产生输出的函数或操作结果暂时保存在PHP的缓冲区,只有当缓冲区满了、或者PHP运行完毕、或者在必要时候进行输出,才会将数据输出到浏览器,此缓冲数据的区域称为PHP的输出缓冲区(OB)。
二、原理
①使用了缓冲区之后,当执行PHP的时候,如果碰到了echo、print_r之类的会输出数据的代码(实际上许多函数都会产生输出),PHP就会将要输出的数据放到PHP自身的缓冲区,等待输出;
②当PHP自身的缓冲区接到指令,指示要输出缓冲区的内容时,将会把缓冲区内的数据输出到服务器上, 服务器接受到PHP输出的数据,然后再把该数据存在到服务器自身的缓冲区内,等到输出;
③当服务器接受到指令,只是要输出缓冲区的内容时, 将会把缓冲区的内容输出,返回到浏览器。