麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > PHP > 正文

PHP緩沖區用法總結

2024-05-04 23:42:59
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP緩沖區用法,結合實例形式總結分析了PHP緩沖區的功能、使用技巧與相關注意事項,需要的朋友可以參考下
 

本文實例總結了PHP緩沖區用法。分享給大家供大家參考,具體如下:

我們先來看一段代碼。

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

按照php手冊里的說法:

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

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

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

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

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

我再來改一改。

<?phpfor ($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()???直接用下面這段代碼不行嗎??

<?phpfor ($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()都不需要了)

<?phpob_implicit_flush(true);for ($i=10; $i>0; $i--){  echo $i;  ob_flush(); #如果ob函數打開的情況下  sleep(1);}?>
<?phpob_end_clean();ob_implicit_flush(true);for ($i=10; $i>0; $i--){  echo $i;  sleep(1);}?>

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

以上所訴可能在某些瀏覽器中不成立。因為瀏覽器也有自己的規則。我是用Firefox1.5,IE6,opera8.5來測試的。其中opera就不能正常輸出,因為它有一個規則,就是不遇到一個HTML標簽,就絕對不輸出,除非到腳本結束。而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";?>
 


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线观看福利网站 | 亚洲国产精品高潮呻吟久久 | 国产精品一区二区三区在线 | 国产成人av免费看 | 狠狠干伊人网 | 亚洲一区在线免费视频 | 亚洲国产超高清a毛毛片 | 久久人人av | 国产免费一区二区三区网站免费 | 神马福利网 | 91久久91久久精品免观看 | 中文字幕在线不卡视频 | 久久精品99国产国产精 | 亚洲日色 | 美女露100%无遮挡 | 一级做人爱c黑人影片 | 国产精品一| 色妞欧美 | a视频网站| 国产精品资源手机在线播放 | 日韩视频一二三 | 亚州精品国产 | 一级黄色在线观看 | 成人福利视频网站 | 亚洲精品成人av在线 | 中文字幕在线成人 | 538任你躁在线精品视频网站 | 国产一区二区三区视频观看 | 久久激情免费视频 | 茄子福利视频 | 一级国产航空美女毛片内谢 | 国产一级爱c视频 | 一级黄色毛片子 | 一道本不卡一区 | 亚洲国产色婷婷 | 久久羞羞视频 | 欧美精品一二三区 | 日韩av电影免费在线观看 | 亚洲精品成人18久久久久 | 99爱视频 | 日日摸夜夜添夜夜添牛牛 |