一般情况下,PHP都是将整个页面全部执行完成后,才会把要输出的内容发送回客户端。
for ($i = 0; $i < 10; $i++) {
echo $i;
sleep(1);
}
这段代码会在十秒后输出“-12345678910”,
如果要实现每秒实时输出一位可用以下两种方式:
第一种
设置执行时间不限时
set_time_limit(0);
清除并关闭缓冲,输出到浏览器之前使用这个函数。
ob_end_clean();
控制隐式缓冲泻出,默认off,打开时,对每个 print/echo 或者输出命令的结果都发送到浏览器。
ob_implicit_flush(1);
<?php
ob_end_clean();
ob_implicit_flush(1);
for ($i=0; $i < 10 ; $i++) {
echo $i;
//浏览器需要凑够一定的字节数才会输出
echo str_repeat ( " " , 1024 ) ;
sleep(1);
}
第二种
ob_*系列函数, 是操作PHP本身的输出缓冲区.
ob_flush()
flush, 严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的时候, 才有实际作用.
它是刷新WebServer(可以认为特指apache)的缓冲区.
前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器。
flush()
for ($i=0; $i < 10 ; $i++) {
echo $i;
echo str_repeat ( " " , 1024 ) ;
ob_flush ( ) ;
flush ( ) ;
sleep(1);
}
参考: