//详细解释链接
PHP FLUSH SLEEP 输出缓存控制详解 - (BACH) - 博客园
/**
* 实时输出打印
* @param type $msg 需要打印的消息
* @param type $datetime 是否打印时间
* @param type $sleep 是否需要输出间歇时间
* @param type $size 缓冲区大小 默认 4096
* @param type $br 打印BR个数 默认2
*/
function output($msg = "This is test.", $datetime = true, $sleep = true, $size = 4096, $br = 2) {
if ($datetime) {
echo date("Y-m-d H:i:s");
}
if (empty($size)) {
$size = ini_get('output_buffering');
}
if (is_array($msg)) {
var_dump($msg);
} else {
echo " $msg";
}
for ($i = 0; $i < $br; $i++) {
echo "<br/>";
}
echo str_pad('<div></div>', $size*100); //使缓冲区溢出 复制输出4096个字节
ob_flush(); //释放php内置缓存
flush(); //输出送出的缓冲内容 到浏览器
if ($sleep === true) {
sleep(1);
} else if (is_numeric($sleep) && $sleep > 0) {
sleep($sleep);
} else {
//不休息
}
}
/**
3s后输出
*/
for ($i = 0; $i < 3; $i++) {
echo time() . date("Y-m-d H:i:s") . "<br/><br/>";
sleep(1);
}
/**
每隔1s输出
*/
for ($i = 0; $i < 3; $i++) {
/**
在php中有个输出缓存控制,具体怎么解释的请百度一下
我这里php.ini 中 output_buffering=4096;
请自行测试改正
关于 关闭 缓冲区,output_buffering=off
*/
echo str_pad('<div></div>', 4096*100); //使缓冲区溢出 复制输出4096个字节
echo time() . date("Y-m-d H:i:s") . "<br/><br/>";
flush(); //输出送出的缓冲内容
sleep(1);
}
在Nginx中,有个Nginx 缓冲区,可能会与php本身设置有冲突,所以存在在Nginx中无法实时输出的问题
如果以上代码不能有效运行,可参考以下代码
ob_end_clean();
ob_implicit_flush(1);
for ($i = 0; $i < 10; $i++) {
echo str_repeat('<div></div>', 20000);//浏览器这个沙雕居然能存储数据了,这也是你感觉 //ob_flush() php 输送缓冲区内容无用的
echo date("Y-m-d H:i:s").' .....'.$i.'<br/>';
sleep(1);
}