• <kbd id="qyk40"></kbd>
  • <strike id="qyk40"></strike><samp id="qyk40"><pre id="qyk40"></pre></samp>

    緩沖輸出 

    <?php 
    for ($i=10; $i>0; $i--) 

     echo $i; 
     flush(); 
     sleep(1); 

    ?>按照php手冊里的說法 

    該函數將當前為止程序的所有輸出發送到用戶的瀏覽器。 

    上面的這段代碼,應該隔一秒鐘輸出一次$i。但是實際中卻不一定是這樣。有可能是等了10秒鐘后,所有的輸出同時呈現出來。 

    好,我們來改一下這段代碼,改成 

    <?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); 

    ?>運行一下,是不是發現$i也隔一秒輸出一次了?這是為什么呢? 
    別急,我們來看看php.ini。 

    打開php.ini,搜索output_buffering,我們會看到類似這樣的設置 output_buffering = 4096。正如它的名字output_buffering一樣,這個設置的作用就是把輸出緩沖一下,緩沖大小為4096bytes. 

    在我們的第一段代碼里,之所以沒有按預期的輸出,正是因為這個output_buffering把那些輸出都緩沖了。沒達到4096bytes或者腳本結束,輸出是不會被發送出去的。 

    而第二段代碼中的ob_end_clean()和ob_end_flush()的作用,就是終止緩沖。這樣就不用等到有4096bytes的緩沖之后才被發送出去了。 

    第三段代碼中,用了一句ob_flush(),它的作用就是把緩沖的數據發送出去,但是并不會終止緩沖,所以它必須在每次flush()前使用。 

    如果不想使用ob_end_clean(),ob_end_flush()和ob_flush(),我們就必須把php.ini里的output_buffering設得足夠小,例如設為0。需要注意的是,如果你打算在腳本中使用ini_set(”output_buffering”,”0″)來設置,那么請停下來吧,這種方法是不行的。因為在腳本一開始的時候,緩沖設置就已經被載入,然后緩沖就開始了。 

    可能你會問了,既然ob_flush()是把緩沖的數據發送出去,那么為什么還需要用flush()???直接用下面這段代碼不行嗎?? 

    <?php 
    for ($i=10; $i>0; $i--) 

     echo $i; 
     ob_flush(); 
     sleep(1); 

    ?>請注意ob_flush()和flush()的區別。前者是把數據從PHP的緩沖中釋放出來,后者是把不在緩沖中的或者說是被釋放出來的數據發送到瀏覽器。所以當緩沖存在的時候,我們必須ob_flush()和flush()同時使用。 

    那是不是flush()在這里就是不可缺少的呢?不是的,我們還有另外一種方法,使得當有數據輸出的時候,馬上被發送到瀏覽器。下面這兩段代碼就是不需要使用flush()了。(當你把output_buffering設為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--) [Page]

     echo $i; 
     sleep(1); 

    ?>請注意看上面的ob_implicit_flush(true),這個函數強制每當有輸出的時候,即刻把輸出發送到瀏覽器。這樣就不需要每次輸出(echo)后,都用flush()來發送到瀏覽器了。?

    穩定

    產品高可用性高并發

    貼心

    項目群及時溝通

    專業

    產品經理1v1支持

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽

    堅持

    10年專注高端品質開發
    • 返回頂部
    亚洲精品美女久久久久久久| 久久久久久亚洲精品中文字幕| 乱人伦精品视频在线观看| 国产精品你懂的在线播放| 国产精品久久精品| 精品无码一区二区三区爱欲九九| 免费视频精品一区二区三区| 中国大陆精品视频XXXX| 人妻少妇精品视频二区| 亚洲精品乱码久久久久66| 国产亚洲精品高清在线| 久久久91人妻无码精品蜜桃HD| 500av导航大全精品| 午夜成人精品福利网站在线观看| 亚洲av无码日韩av无码网站冲| 中美日韩在线网免费毛片视频| 日韩精品无码视频一区二区蜜桃| 亚洲精品白浆高清久久久久久| 日韩精品一区二区亚洲AV观看| 日韩视频中文字幕精品偷拍| 八区精品色欲人妻综合网| 国产三级精品在线观看| 国产乱子伦精品视频| 国产成人福利精品视频| 国产福利vr专区精品| 国产SUV精品一区二区88L| 日韩免费在线中文字幕| 日韩电影免费在线观看网站| 日韩亚洲AV无码一区二区不卡| 亚洲日韩国产成网在线观看| 亚洲日韩小电影在线观看| 日韩免费一区二区三区在线播放| 日韩精品久久久久久久电影| 美女免费精品高清毛片在线视 | 日韩在线视频二区| 日韩精品视频在线播放| 日韩伦理一区二区| 亚洲精品国产va在线观看蜜芽| 精品91自产拍在线观看| 国产亚洲精品精品国产亚洲综合| 国内精品久久久久影院薰衣草|