PHP即時實時輸出內容


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

參考:

深入理解ob_flush和flush的區別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM