国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

PHP中怎么實(shí)現輸出緩沖控制

發(fā)布時(shí)間:2021-07-27 11:45 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: 編程語(yǔ)言 歡迎投稿:712375056

PHP中怎么實(shí)現輸出緩沖控制,針對這個(gè)問(wèn)題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

  PHP輸出緩沖控制是什么

  默認情況下,phpbuffer是開(kāi)啟的,而且該buffer默認值是4096,即4kb。你可以通過(guò)在php.ini配置文件中找到output_buffering配置。buffer是一個(gè)內存地址空間,Linux系統默認大小一般為4096(4kb),即一個(gè)內存頁(yè)。主要用于存儲速度不同步的設備或者優(yōu)先級不同的設備之間傳辦理數據的區域。通過(guò)buffer,可以使進(jìn)程這間的相互等待變少。這里說(shuō)一個(gè)通俗一點(diǎn)的例子,你打開(kāi)文本編輯器編輯一個(gè)文件的時(shí)候,你每輸入一個(gè)字符,操作系統并不會(huì )立即把這個(gè)字符直接寫(xiě)入到磁盤(pán),而是先寫(xiě)入到buffer,當寫(xiě)滿(mǎn)了一個(gè)buffer的時(shí)候,才會(huì )把buffer中的數據寫(xiě)入磁盤(pán),當然當調用內核函數flush()的時(shí)候,強制要求把buffer中的臟數據寫(xiě)回磁盤(pán)。

  PHP輸出緩沖控制代碼怎么寫(xiě)

  echo"南無(wú)阿彌陀佛
";

  header("content-type:text/html;charset='utf-8'");

  echo"真善忍好!";

  //output

  //南無(wú)阿彌陀佛

  //真善忍好

  header()必須在任何實(shí)際輸出之前調用,但是我們程序已經(jīng)輸出了,卻正常運行。在看下面的代碼:

  echo"南無(wú)阿彌陀佛
";

  ob_flush();

  header("content-type:text/html;charset='utf-8'");

  echo"真善忍好!";

  //output

  //南無(wú)阿彌陀佛

  //Cannotmodifyheaderinformation-headersalreadysentby(outputstartedatE:\php\test.php:3)

  //真善忍好

  上面程序說(shuō)明程序并沒(méi)有立即輸出,而當調用ob_flush函數的時(shí)候才刷新緩沖,輸出。

  ob_flush()與flush()

  ob_flush(),flush()函數php手冊上都有詳細的說(shuō)明,你可以去查閱一下。二者的區別是:

  ob_flush()是刷新PHP自身的緩沖區

  flush()是它是刷新WebServer的緩沖。輸出到瀏覽器。但是會(huì )出現下面的情況:

  個(gè)別web服務(wù)器程序,特別是Win32下的web服務(wù)器程序,在發(fā)送結果到瀏覽器之前,仍然會(huì )緩存腳本的輸出,直到程序結束為止。有些Apache的模塊,比如mod_gzip,可能自己進(jìn)行輸出緩存,這將導致flush()函數產(chǎn)生的結果不會(huì )立即被發(fā)送到客戶(hù)端瀏覽器。甚至瀏覽器也會(huì )在顯示之前,緩存接收到的內容。例如Netscape瀏覽器會(huì )在接受到換行或html標記的開(kāi)頭之前緩存內容,并且在接受到標記之前,不會(huì )顯示出整個(gè)表格。一些版本的MicrosoftInternetExplorer只有當接受到的256個(gè)字節以后才開(kāi)始顯示該頁(yè)面,所以必須發(fā)送一些額外的空格來(lái)讓這些瀏覽器顯示頁(yè)面內容。

  比如:

  /**

  Server:LightTPD/1.4.28(Win32)

  X-Powered-By:PHP/5.3.27

  */

  echo'佛法無(wú)邊'."
";

  ob_flush();

  flush();

  sleep(1);

  echo'法輪常轉';

  //output

  上面的代碼在chrome瀏覽器上面是一行一行的輸出,在ie系列的瀏覽器則是全部輸出。其實(shí)就是上面的第四條一些瀏覽器只有當接收256個(gè)字符才開(kāi)始顯示。把上面的代碼改成下面形式:

  /**

  Server:LightTPD/1.4.28(Win32)

  X-Powered-By:PHP/5.3.27

  */

  echostr_pad('',240)."\n";

  echo'佛法無(wú)邊'."
";

  ob_flush();

  flush();

  sleep(1);

  echo'法輪常轉';

  //output

  這樣在ie下面就會(huì )一行一行輸出,因為超過(guò)256個(gè)字符。

  ob其他函數說(shuō)明

  1.ob_end_flush與ob_end_clean

  end的顧名思義就結束,關(guān)閉緩沖區,都是關(guān)閉輸出緩沖,一個(gè)是輸出緩沖區,一個(gè)是清除。比如

  /**

  Server:LightTPD/1.4.28(Win32)

  X-Powered-By:PHP/5.3.27

  */

  echo'before';

  ob_end_clean();

  echostr_pad('',4096)."\n";

  for($i=10;$i>0;$i--)

  {

  echo$i;

  sleep(1);

  }

  上述代碼是一下輸出全部?jì)热?,而不是一個(gè)一個(gè)輸出。ob_end_clean()不是關(guān)閉了緩沖了?怎么不是一個(gè)一個(gè)輸出呢,其實(shí)我們上面也說(shuō)了,php不是直接輸出給瀏覽器,而是webserver。雖然php沒(méi)有了緩沖。但是webserver還是有的。所以下面代碼:

  /**

  Server:LightTPD/1.4.28(Win32)

  X-Powered-By:PHP/5.3.27

  */

  echo'before';

  ob_end_clean();

  echostr_pad('',4096)."\n";

  for($i=10;$i>0;$i--)

  {

  flush();

  echo$i;

  sleep(1);

  }

  加上flush(),就會(huì )一行一行輸出。假如把ob_end_clean換成ob_end_flush會(huì )把before輸出來(lái)。

  其他函數可參考手冊,比較簡(jiǎn)單。

  總結

  php腳本到瀏覽器,要經(jīng)過(guò)phpbuffer=》webserverbuffer=》browserbuffer。最后顯示到瀏覽器。缺一不可。所以大家要ob_flush和flush以及加上echostr_pad(”,4096)才能調試出你想要的效果。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

php
亚洲午夜久久久影院| 又爽又黄又无遮挡网站| 最近免费中文字幕MV在线视频3| 人妻仑乱A级毛片免费看| 亚洲AV午夜成人片精品电影| 国产内射大片99|