php flush()刷新不能輸出緩沖的原因分析


在php程序編寫中,flush()的使用率還是挺高的,它在網頁表現即時信息效果時發揮了極為重要的作用,比如之前寫的php實現限制文件下載速度的代碼實例,flush()就起了舉足輕重的作用,是進度條實現代碼里的關鍵語句。

關於flash()的解釋

語法:

flush();

作用:

刷新PHP程序的緩沖,而不論PHP執行在何種情況下(CGI ,web服務器等等)。該函數將當前為止程序的所有輸出發送到用戶的瀏覽器。

問題:

flush()刷新為什么不能輸出緩沖?

很簡單的程序代碼

for ($i=10; $i>2; $i--)
{
    echo $i.'<br />';
    flush();
    sleep(1);
}

 

其運行結果應該是從10到3,依次輸出到瀏覽器里,效果圖如下:

上述代碼,如果沒有flush();這句,則10到3的數字會一起輸出到瀏覽器。

然而就是上述的代碼,我在本地測試成功,但是上傳到空間里后卻無效了,這是怎么回事?

后來我查了相關的資料,發現flush();的使用還需要注意一些問題,這些問題可能在我們沒有遇到的時候我們是不會去想到的。那就是flush()需要與ob_flush()配合着使用,否則在linux系統里不會輸出緩沖。

而flush()與ob_flush()配合着使用的同時,寫法上也需要講究,那就是先寫ob_flush();再寫flush();,如下:

ob_flush();
flush();

 

好了,問題的症狀就在這里,於是,上述代碼就應該寫成如下所示:

for ($i=10; $i>2; $i--)
{
    echo $i.'<br />';
    ob_flush(); //此句不能少
    flush();
    sleep(1);
}
ob_end_flush();

 

這樣,無論是在哪個系統,哪個web服務器,都可以正常的輸出緩沖了。


免責聲明!

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



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