数据从Apache发送到用户代理,一般要涉及到三个缓冲(Buffer):PHP输出缓冲、Apache输出缓冲、用户代理的缓冲。因此,只要禁用或者实时刷新这几个缓冲,就可以把PHP的输出实时的显示。
PHP的输出缓冲可以通过 ob_start() 或者 ini 中的 output.buffering 来启用,缓冲的刷新可以用 ob_flush() 实现
Apache 的输出缓冲在 PHP 中可以通过 flush() 来刷新
用户代理方面的缓冲我们可以通过使用无缓冲的代理(nc)或者禁用缓冲(curl -N)
了解了上面这些内容,实时输出的程序就很容易实现了:
//实时显示输出 ob_end_flush(); //关闭php缓存,或者在flush前ob_flush(); echo str_repeat(" ", 1024); //ie下 需要先发送256个字节, firefox 1024, chrome 2048 set_time_limit(0); for($i=0; $i<10; $i++) { echo "Now Index is :". $i."<br>"; //ob_flush(); //把php缓存推送到apache去,前面已经关闭了php缓存了,这里再推就报错了 flush(); //把apache缓存推送到浏览器去 sleep(1); }
http://www.kukaka.org/home/content/450