欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年02月14日 09:56:52   作者:思齊_  
這篇文章主要介紹了PHP緩沖區(qū)用法,結(jié)合實例形式總結(jié)分析了PHP緩沖區(qū)的功能、使用技巧與相關(guān)注意事項,需要的朋友可以參考下

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

我們先來看一段代碼。

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

按照php手冊里的說法

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

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

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

<?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);
}
?>

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

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

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

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

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

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

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

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

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP基本語法入門教程》、《PHP錯誤與異常處理方法總結(jié)》及《php常用函數(shù)與技巧總結(jié)

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

  • php bootstrap實現(xiàn)簡單登錄

    php bootstrap實現(xiàn)簡單登錄

    這篇文章主要為大家詳細(xì)介紹了php bootstrap實現(xiàn)簡單登錄的具體方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • PHP的Trait機(jī)制原理與用法分析

    PHP的Trait機(jī)制原理與用法分析

    這篇文章主要介紹了PHP的Trait機(jī)制原理與用法,結(jié)合實例形式分析了PHP Trait機(jī)制的基本功能、原理及簡單使用技巧,需要的朋友可以參考下
    2019-10-10
  • 深入理解PHP中的static和yield關(guān)鍵字

    深入理解PHP中的static和yield關(guān)鍵字

    這篇文章主要給大家介紹了關(guān)于PHP中static和yield關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用php具有一定的參考學(xué)習(xí)價值,文章需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 用PHP代替JS玩轉(zhuǎn)DOM的思路及示例代碼

    用PHP代替JS玩轉(zhuǎn)DOM的思路及示例代碼

    思路就是通過DOMDocument將一個html file轉(zhuǎn)換成DOM樹的數(shù)據(jù)結(jié)構(gòu),再用DOMXPath的實例去搜索這個DOM樹,接下來就可以對當(dāng)前節(jié)點(diǎn)的子樹進(jìn)行遍歷
    2014-06-06
  • 詳解PHP json_decode()函數(shù)的使用方法

    詳解PHP json_decode()函數(shù)的使用方法

    PHP中的json_decode()函數(shù)是用于將JSON字符串解碼為PHP變量的函數(shù),它將JSON字符串轉(zhuǎn)換為與其對應(yīng)的PHP數(shù)據(jù)類型,例如,將JSON字符串轉(zhuǎn)換為關(guān)聯(lián)數(shù)組、對象或其他數(shù)據(jù)類型,本文就給大家介紹一下PHP json_decode()函數(shù)的使用方法,需要的朋友可以參考下
    2023-08-08
  • 特詳細(xì)的PHPMYADMIN簡明安裝教程

    特詳細(xì)的PHPMYADMIN簡明安裝教程

    簡單的說,phpmyadmin就是一種mysql的管理工具,安裝該工具后,即可以通過web形式直接管理mysql數(shù)據(jù),而不需要通過執(zhí)行系統(tǒng)命令來管理,
    2008-08-08
  • php判斷并刪除空目錄及空子目錄的方法

    php判斷并刪除空目錄及空子目錄的方法

    這篇文章主要介紹了php判斷并刪除空目錄及空子目錄的方法,可實現(xiàn)遍歷目標(biāo)文件夾判斷是否為空及刪除空目錄的功能,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • PHP縮略圖等比例無損壓縮,可填充空白區(qū)域補(bǔ)充色

    PHP縮略圖等比例無損壓縮,可填充空白區(qū)域補(bǔ)充色

    PHP縮略圖 等比例無損壓縮,可填充空白區(qū)域補(bǔ)充色的實現(xiàn)代碼,需要的朋友可以參考下。
    2011-06-06
  • PHP跳出for循環(huán)中的break和continue

    PHP跳出for循環(huán)中的break和continue

    在PHP中,可以使用break關(guān)鍵字來跳出循環(huán),,PHP中還可以使用continue關(guān)鍵字跳過本次循環(huán)并繼續(xù)執(zhí)行下一次循環(huán),當(dāng)循環(huán)執(zhí)行到continue語句時,本次循環(huán)中continue之后的代碼將不再執(zhí)行,直接進(jìn)入下一次循環(huán)
    2023-09-09
  • 自寫的利用PDO對mysql數(shù)據(jù)庫增刪改查操作類

    自寫的利用PDO對mysql數(shù)據(jù)庫增刪改查操作類

    這篇文章主要給大家介紹了關(guān)于自寫的利用PDO對mysql數(shù)據(jù)庫的增刪改查操作類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02

最新評論