最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php flush類輸出緩沖剖析

 更新時間:2008年10月19日 11:48:08   作者:  
該函數(shù)將當(dāng)前為止程序的所有輸出發(fā)送到用戶的瀏覽器。

<?php
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
}
?>
按照php手冊里的說法
該函數(shù)將當(dāng)前為止程序的所有輸出發(fā)送到用戶的瀏覽器。
上面的這段代碼,應(yīng)該隔一秒鐘輸出一次$i。但是實際中卻不一定是這樣。有可能是等了10秒鐘后,所有的輸出同時呈現(xiàn)出來。
好,我們來改一下這段代碼,改成
<?php
ob_end_clean();//修改部分
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
}
?>
嘿,加了這一句ob_end_clean();,居然就OK了。實際上,我們把ob_end_clean()換成ob_end_flush()也一樣OK。
我再來改一改。
<?php
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();//修改部分
flush();
sleep(1);
}
?>
運行一下,是不是發(fā)現(xiàn)$i也隔一秒輸出一次了?這是為什么呢?
別急,我們來看看php.ini。
打開php.ini,搜索output_buffering,我們會看到類似這樣的設(shè)置 output_buffering = 4096。正如它的名字output_buffering一樣,這個設(shè)置的作用就是把輸出緩沖一下,緩沖大小為4096bytes.
在我們的第一段代碼里,之所以沒有按預(yù)期的輸出,正是因為這個output_buffering把那些輸出都緩沖了。沒達(dá)到4096bytes或者腳本結(jié)束,輸出是不會被發(fā)送出去的。
而第二段代碼中的ob_end_clean()和ob_end_flush()的作用,就是終止緩沖。這樣就不用等到有4096bytes的緩沖之后才被發(fā)送出去了。
第三段代碼中,用了一句ob_flush(),它的作用就是把緩沖的數(shù)據(jù)發(fā)送出去,但是并不會終止緩沖,所以它必須在每次flush()前使用。
如果不想使用ob_end_clean(),ob_end_flush()和ob_flush(),我們就必須把php.ini里的 output_buffering設(shè)得足夠小,例如設(shè)為0。需要注意的是,如果你打算在腳本中使用ini_set(” output_buffering”,”0″)來設(shè)置,那么請停下來吧,這種方法是不行的。因為在腳本一開始的時候,緩沖設(shè)置就已經(jīng)被載入,然后緩沖就開始了。
可能你會問了,既然ob_flush()是把緩沖的數(shù)據(jù)發(fā)送出去,那么為什么還需要用flush()???直接用下面這段代碼不行嗎??
<?php
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
sleep(1);
}
?>
請注意ob_flush()和flush()的區(qū)別。前者是把數(shù)據(jù)從PHP的緩沖中釋放出來,后者是把不在緩沖中的或者說是被釋放出來的數(shù)據(jù)發(fā)送到瀏覽器。所以當(dāng)緩沖存在的時候,我們必須ob_flush()和flush()同時使用。
那是不是flush()在這里就是不可缺少的呢?不是的,我們還有另外一種方法,使得當(dāng)有數(shù)據(jù)輸出的時候,馬上被發(fā)送到瀏覽器。下面這兩段代碼就是不需要使用flush()了。(當(dāng)你把output_buffering設(shè)為0的時候,連ob_flush()和ob_end_clean()都不需要了)
<?php
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
sleep(1);
}
?>
<?php
ob_end_clean();
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
echo $i;
sleep(1);
}
?>
請注意看上面的ob_implicit_flush(true),這個函數(shù)強制每當(dāng)有輸出的時候,即刻把輸出發(fā)送到瀏覽器。這樣就不需要每次輸出(echo)后,都用flush()來發(fā)送到瀏覽器了。
以上所訴可能在某些瀏覽器中不成立。因為瀏覽器也有自己的規(guī)則。我是用Firefox1.5,IE6,opera8.5來測試的。其中opera就不能正常輸出,因為它有一個規(guī)則,就是不遇到一個HTML標(biāo)簽,就絕對不輸出,除非到腳本結(jié)束。而FireFox和IE還算比較正常的。
最后附上一段非常有趣的代碼,作者為PuTTYshell。在一個腳本周期里,每次輸出,都會把前一次的輸出覆蓋掉。
以下代碼只在firefox下可用,其他瀏覽器并不支持multipart/x-mixed-replace的Content-Type.
<?php
header('Content-type: multipart/x-mixed-replace;boundary=endofsection');
print "\n--endofsection\n";
$pmt = array("-", "\\", "|", "/" );
for( $i = 0; $i <10; $i ++ ){
sleep(1);
print "Content-type: text/plain\n\n";
print "Part $i\t".$pmt[$i % 4];
print "--endofsection\n";
ob_flush();
flush();
}
print "Content-type: text/plain\n\n";
print "The end\n";
print "--endofsection--\n";
?>

相關(guān)文章

  • PHP通過串口實現(xiàn)發(fā)送短信

    PHP通過串口實現(xiàn)發(fā)送短信

    本文給大家詳細(xì)介紹了,如何使用php通過串口來實現(xiàn)發(fā)送短信的思路以及具體的實現(xiàn)代碼,十分的實用,有需要的小伙伴可以參考下。
    2015-07-07
  • php版微信自定義回復(fù)功能示例

    php版微信自定義回復(fù)功能示例

    這篇文章主要介紹了php版微信自定義回復(fù)功能,結(jié)合完整實例形式分析了php版微信自定義回復(fù)功能的設(shè)置與代碼實現(xiàn)技巧,需要的朋友可以參考下
    2016-12-12
  • php使用Jpgraph繪制復(fù)雜X-Y坐標(biāo)圖的方法

    php使用Jpgraph繪制復(fù)雜X-Y坐標(biāo)圖的方法

    這篇文章主要介紹了php使用Jpgraph繪制復(fù)雜X-Y坐標(biāo)圖的方法,通過設(shè)置圖像陰影、邊距、字體、顏色、曲線等實現(xiàn)Jpgraph繪制復(fù)雜坐標(biāo)圖的功能,非常簡單實用,需要的朋友可以參考下
    2015-06-06
  • PHP設(shè)計模式之裝飾者模式代碼實例

    PHP設(shè)計模式之裝飾者模式代碼實例

    這篇文章主要介紹了PHP設(shè)計模式之裝飾者模式代碼實例,裝飾者模式就是不修改原類代碼和繼承的情況下動態(tài)擴(kuò)展類的功能,本文就給出了代碼實例,需要的朋友可以參考下
    2015-05-05
  • Php連接及讀取和寫入mysql數(shù)據(jù)庫的常用代碼

    Php連接及讀取和寫入mysql數(shù)據(jù)庫的常用代碼

    既然現(xiàn)在你看到了這篇文章,說明你肯定知道PHP和MySQL是怎么一回事,我就不啰嗦了。但為什么你還要繼續(xù)閱讀此文呢?可能是以前你習(xí)慣復(fù)制粘貼一些代碼,并沒有真正弄懂代碼的含義;也可能你以前弄懂了,但像我一樣,有一段時間沒有接觸,生疏了
    2014-08-08
  • PHP中include和require的使用詳解

    PHP中include和require的使用詳解

    這篇文章主要介紹了PHP中include和require的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用PHP,感興趣的朋友可以了解下
    2021-04-04
  • php+ajax無刷新分頁實例詳解

    php+ajax無刷新分頁實例詳解

    這篇文章主要介紹了php+ajax無刷新分頁的方法,結(jié)合實例形式較為詳細(xì)的分析了php數(shù)據(jù)查詢結(jié)合ajax數(shù)據(jù)交互實現(xiàn)無刷新分頁效果的相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • PHP實現(xiàn)Soap通訊的方法

    PHP實現(xiàn)Soap通訊的方法

    這篇文章主要介紹了PHP實現(xiàn)Soap通訊的方法,是web service的一個典型應(yīng)用,需要的朋友可以參考下
    2014-11-11
  • PHP 巧用數(shù)組降低程序的時間復(fù)雜度

    PHP 巧用數(shù)組降低程序的時間復(fù)雜度

    通常開發(fā)人員在寫程序的時候,往往是把已經(jīng)設(shè)計好或者構(gòu)思好的運算邏輯,直接用編程語言翻譯出來。
    2010-01-01
  • MongoDB在PHP中的常用操作小結(jié)

    MongoDB在PHP中的常用操作小結(jié)

    本篇文章主要是對MongoDB在PHP中的常用操作進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02

最新評論

会昌县| 内江市| 金门县| 潍坊市| 黔南| 上虞市| 新巴尔虎左旗| 和顺县| 二连浩特市| 皋兰县| 榆社县| 沙坪坝区| 咸宁市| 咸阳市| 叙永县| 台前县| 中西区| 长顺县| 邵阳市| 关岭| 济宁市| 富锦市| 云龙县| 菏泽市| 黄龙县| 汪清县| 东源县| 武清区| 天台县| 谷城县| 宜宾市| 陇川县| 大同市| 鹿邑县| 西华县| 广元市| 邵阳县| 临高县| 离岛区| 文山县| 贵定县|