一般情況下,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);
}
參考:
