久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      php中的輸出控制方法

      緩沖輸出

       

      <?php  for ($i=10; $i>0; $i--)  {   echo $i;   flush();   sleep(1);  }  ?>

       按照php手冊里的說法

      該函數(shù)將當(dāng)前為止程序的所有輸出發(fā)送到用戶的瀏覽器。

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

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

       

      <?php  ob_end_clean();//修改部分  for ($i=10; $i>0; $i--)  {   echo $i;   flush();   sleep(1);  }  ?>

       嘿,加了這一句ob_end_clean();,居然就OK了。實(shí)際上,我們把ob_end_clean()換成ob_end_flush()也一樣OK。

      我再來改一改。

       

      <?php  for ($i=10; $i>0; $i--)  {   echo $i;   ob_flush();//修改部分   flush();   sleep(1);  }  ?>

       運(yùn)行一下,是不是發(fā)現(xiàn)$i也隔一秒輸出一次了?這是為什么呢?
      別急,我們來看看php.ini。

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

      在我們的第一段代碼里,之所以沒有按預(yù)期的輸出,正是因?yàn)檫@個(gè)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è)置,那么請停下來吧,這種方法是不行的。因?yàn)樵谀_本一開始的時(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)緩沖存在的時(shí)候,我們必須ob_flush()和flush()同時(shí)使用。

      那是不是flush()在這里就是不可缺少的呢?不是的,我們還有另外一種方法,使得當(dāng)有數(shù)據(jù)輸出的時(shí)候,馬上被發(fā)送到瀏覽器。下面這兩段代碼就是不需要使用flush()了。(當(dāng)你把output_buffering設(shè)為0的時(shí)候,連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),這個(gè)函數(shù)強(qiáng)制每當(dāng)有輸出的時(shí)候,即刻把輸出發(fā)送到瀏覽器。這樣就不需要每次輸出(echo)后,都用flush()來發(fā)送到瀏覽器了。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號