技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

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

作者:admin    時(shí)間:2012-11-6 21:1:4    瀏覽:

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

關(guān)于flash()的解釋

語法:

flush();

作用:

刷新PHP程序的緩沖,而不論P(yáng)HP執(zhí)行在何種情況下(CGI ,web服務(wù)器等等)。該函數(shù)將當(dāng)前為止程序的所有輸出發(fā)送到用戶的瀏覽器。

問題:

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

很簡單的程序代碼

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

其運(yùn)行結(jié)果應(yīng)該是從10到3,依次輸出到瀏覽器里,效果圖如下:

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

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

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

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

ob_flush();
flush();

好了,問題的癥狀就在這里,于是,上述代碼就應(yīng)該寫成如下所示:

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

這樣,無論是在哪個(gè)系統(tǒng),哪個(gè)web服務(wù)器,都可以正常的輸出緩沖了。

標(biāo)簽: 腳本  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */