• <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年專注高端品質開發
    • 返回頂部
    国产91精品一区二区麻豆网站| 久久国产精品-久久精品| 国产精品最新资源网| 国产精品久久久久aaaa| 久久99精品福利久久久| a级亚洲片精品久久久久久久| 亚洲综合国产精品第一页 | 久久国产精品久久久久久久久久| 精品视频一区二区三区| 一区二区日韩国产精品| 在线观看亚洲AV日韩A∨| 日韩精品电影一区亚洲| 国产精品情侣自拍| 日本精品一区二区在线播放| 久久精品国产亚洲av品善| 国产精品美女久久久久久久| 97久久久久人妻精品专区| 精品国产VA久久久久久久冰 | 视频久re精品在线观看| 午夜精品久久久久成人| 人妻少妇精品无码专区动漫| 国产精品亚洲四区在线观看| 国产精品免费精品自在线观看| 91国内揄拍国内精品情侣对白| 久久精品www人人爽人人| 久久精品中文騷妇女内射| 人妻少妇精品视频二区| 日韩精品区一区二区三VR| 无码精品久久久久久人妻中字| 久久99精品久久久久久综合| 久久99精品一久久久久久| 99精品热女视频专线| 91精品视品在线播放| 亚洲AV无码精品蜜桃| 精品国产sm捆绑最大网免费站| 国产精品久久久久鬼色| 亚洲日韩精品A∨片无码加勒比| 日韩国产精品亚洲а∨天堂免| 少妇人妻精品一区二区| 国产精品李雅在线观看| 亚洲日韩精品一区二区三区 |