欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
剖析PHP中的輸出緩沖
剖析PHP中的輸出緩沖

我們先來(lái)看一段代碼。

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

按照php手冊里的說(shuō)法

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

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

好,我們來(lái)改一下這段代碼,改成

<?phpob_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。

我再來(lái)改一改。

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

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

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

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

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

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

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

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

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

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

那是不是flush()在這里就是不可缺少的呢?不是的,我們還有另外一種方法,使得當有數據輸出的時(shí)候,馬上被發(fā)送到瀏覽器。下面這兩段代碼就是不需要使用flush()了。(當你把output_buffering設為0的時(shí)候,連ob_flush()和ob_end_clean()都不需要了)

<?phpob_implicit_flush(true);for ($i=10; $i>0; $i--){	echo $i;	ob_flush();	sleep(1);}?>
<?phpob_end_clean();ob_implicit_flush(true);for ($i=10; $i>0; $i--){	echo $i;	sleep(1);}?>

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

以上所訴可能在某些瀏覽器中不成立。因為瀏覽器也有自己的規則。我是用Firefox1.5,IE6,opera8.5來(lái)測試的。其中opera就不能正常輸出,因為它有一個(gè)規則,就是不遇到一個(gè)HTML標簽,就絕對不輸出,除非到腳本結束。而FireFox和IE還算比較正常的。

最后附上一段非常有趣的代碼,作者為PuTTYshell。在一個(gè)腳本周期里,每次輸出,都會(huì )把前一次的輸出覆蓋掉。
以下代碼只在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";?>

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
采用PHP實(shí)現”服務(wù)器推”技術(shù)的聊天室(轉)
PHP中的輸出緩沖控制
php緩沖 output
PHP實(shí)例教程 Output Control輸出函數
PHP立即刷新緩存(輸出)的方法
PHP在線(xiàn)檢測是否更新并解壓覆蓋代碼
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久