国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP緩沖區(qū)用法總結(jié)

2020-03-22 19:18:07
字體:
供稿:網(wǎng)友
本文實例總結(jié)了PHP緩沖區(qū)用法。分享給大家供大家參考,具體如下:我們先來看一段代碼。for ($i=10; $i $i--) echo $i; flush(); sleep(1);
函數(shù)將當前為止程序的所有輸出發(fā)送到用戶的瀏覽器。上面的這段代碼,應該隔一秒鐘輸出一次$i。但是實際中卻不一定是這樣。有可能是等了10秒鐘后,所有的輸出同時呈現(xiàn)出來。好,我們來改一下這段代碼,改成ob_end_clean();//修改部分for ($i=10; $i $i--) echo $i; flush(); sleep(1);
嘿,加了這一句ob_end_clean();,居然就OK了。實際上,我們把ob_end_clean()換成ob_end_flush()也一樣OK。我再來改一改。for ($i=10; $i $i--) echo $i; ob_flush();//修改部分 flush(); sleep(1);
運行一下,是不是發(fā)現(xiàn)$i也隔一秒輸出一次了?這是為什么呢?
別急,我們來看看php.ini。打開php.ini,搜索output_buffering,我們會看到類似這樣的設置 output_buffering = 4096。正如它的名字output_buffering一樣,這個設置的作用就是把輸出緩沖一下,緩沖大小為4096bytes.在我們的第一段代碼里,之所以沒有按預期的輸出,正是因為這個output_buffering把那些輸出都緩沖了。沒達到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設得足夠小,例如設為0。需要注意的是,如果你打算在腳本中使用ini_set("output_buffering","0″)來設置,那么請停下來吧,這種方法是不行的。因為在腳本一開始的時候,緩沖設置就已經(jīng)被載入,然后緩沖就開始了。可能你會問了,既然ob_flush()是把緩沖的數(shù)據(jù)發(fā)送出去,那么為什么還需要用flush() 直接用下面這段代碼不行嗎??for ($i=10; $i $i--) echo $i; ob_flush(); sleep(1);
請注意ob_flush()和flush()的區(qū)別。前者是把數(shù)據(jù)從PHP的緩沖中釋放出來,后者是把不在緩沖中的或者說是被釋放出來的數(shù)據(jù)發(fā)送到瀏覽器。所以當緩沖存在的時候,我們必須ob_flush()和flush()同時使用。那是不是flush()在這里就是不可缺少的呢?不是的,我們還有另外一種方法,使得當有數(shù)據(jù)輸出的時候,馬上被發(fā)送到瀏覽器。下面這兩段代碼就是不需要使用flush()了。(當你把output_buffering設為0的時候,連ob_flush()和ob_end_clean()都不需要了)ob_implicit_flush(true);for ($i=10; $i $i--) echo $i; ob_flush(); #如果ob函數(shù)打開的情況下 sleep(1);
請注意看上面的ob_implicit_flush(true),這個函數(shù)強制每當有輸出的時候,即刻把輸出發(fā)送到瀏覽器。這樣就不需要每次輸出(echo)后,都用flush()來發(fā)送到瀏覽器了。以上所訴可能在某些瀏覽器中不成立。因為瀏覽器也有自己的規(guī)則。我是用Firefox1.5,IE6,opera8.5來測試的。其中opera就不能正常輸出,因為它有一個規(guī)則,就是不遇到一個HTML標簽,就絕對不輸出,除非到腳本結(jié)束。而FireFox和IE還算比較正常的。最后附上一段非常有趣的代碼,作者為PuTTYshell。在一個腳本周期里,每次輸出,都會把前一次的輸出覆蓋掉。
以下代碼只在firefox下可用,其他瀏覽器并不支持multipart/x-mixed-replace的Content-Type. header('Content-type: multipart/x-mixed-replace;boundary=endofsection'); print "/n--endofsection/n"; $pmt = array("-", "http://", "|", "/" ); for( $i = 0; $i $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相關內(nèi)容感興趣的讀者可查看本站專題:《PHP基本語法入門教程》、《PHP錯誤與異常處理方法總結(jié)》及《php常用函數(shù)與技巧總結(jié)》希望本文所述對大家PHP程序設計有所幫助。PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 疏附县| 潮州市| 呼和浩特市| 贺兰县| 沙河市| 昭苏县| 澄迈县| 兰州市| 五原县| 旺苍县| 麻江县| 绍兴市| 南丹县| 南岸区| 张家口市| 桐乡市| 工布江达县| 乐安县| 石楼县| 玉门市| 乌恰县| 沈阳市| 神农架林区| 兖州市| 镇原县| 南澳县| 仪征市| 台北县| 防城港市| 锡林郭勒盟| 安岳县| 永宁县| 东台市| 大关县| 新源县| 平远县| 汝南县| 壤塘县| 师宗县| 上虞市| 怀仁县|