转:php实时输出数据


数据从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

Archives