php輸出緩衝用法執行個體教程

來源:互聯網
上載者:User
本文介紹了php輸出緩衝的用法,在php所謂的輸出緩衝,就是代碼中的echo 或其他輸出命令在執行時是先寫入到 php buffer,在指令碼執行完或者強制執行輸出緩衝的命令後,才會把資料輸出到瀏覽器.

一、什麼是php輸出緩衝 在php所謂的輸出緩衝,就是代碼中的echo 或其他輸出命令在執行時是先寫入到 php buffer,在指令碼執行完或者強制執行輸出緩衝的命令後,才會把資料輸出到瀏覽器(其中php buffer 就是php.ini中設定的output_buffering ,預設是on,表明無限制大小,可以換成數字來限制大小)。

例子:

echo 'hlmblog.com'; echo '技術'; echo '分享';

這兩個echo 是按順序插入到緩衝區的,只有指令碼執行完成或者強制執行緩衝輸出才會把資料輸出到瀏覽器。 即時地輸出echo的資料:

ob_end_flush(); //關閉php緩衝,或者在flush()前先執行ob_flush(),下面有解釋 echo str_pad(" ", 256); for ($i=5; $i>0; $i--) { echo $i. '
'; flush(); sleep(1); }

注意:

1:flush和ob_flush 區別: 乍看之下兩者很像,而且很多手冊的解釋也不清楚,模淩兩可,其實兩者是有很大區別的。 當php.ini沒有開啟php buffer緩衝時,php指令碼輸出的內容都會在服務端處於等待輸出狀態 ,不會儲存到輸出緩衝,因為緩衝都沒開,此時利用flush可以將那些等待輸出的內容立即輸出來發到用戶端(瀏覽器或者其他輸出端)。

當php.ini開啟了php buffer緩衝後,php指令碼輸出內容的第一步是儲存在輸出緩衝中 ,此時等到輸出的內容是沒有資料的,用flush的話是無效果,取不到資料的。因此要先利用ob_flush把輸出緩衝中的內容取出來變成等待輸出的狀態,接下來在利用flush把內容發到用戶端。執行的順序是先ob_flush 再 flush。 因此要實現即時地輸出,要麼利用ob_end_flush 先關掉php 輸出緩衝後直接flush,要麼先 ob_flush再flush。

2:瀏覽器無法輸出即時資料 修改後的代碼,在chrome firefox ie等瀏覽器都是一次性輸出:

ob_end_flush(); //關閉php緩衝,或者在flush前ob_flush(); echo str_pad(" ", 256); for ($i=5; $i>0; $i--) { echo $i; flush(); sleep(1); }

只要順便加個html標籤,即可即時輸出。 原因是:只有在遇到html標籤的時候才會即時輸出,真是神奇,還好一般輸出的內容都會帶著html標籤,很少純文字。 解決辦法:加個斷行符號或者其他的html標籤即可解決問題。

二、控制緩衝輸出的例子1、產生靜態頁面 靜態頁面的載入速度就是快

echo str_pad('', 1024);//使緩衝區溢位 ob_start();//開啟緩衝區 $content = ob_get_contents();//擷取頁面輸出的內容 $f = fopen('./index.html', 'w'); fwrite($f, $content);//內容寫入txt檔案 fclose($f); ob_end_clean();//清空並關閉緩衝區

2、捕獲輸出

function test($param) { if($param) { ob_start(); eval($param); $contents = ob_get_contents(); ob_end_clean(); }else { echo '遺憾的沒有輸出'; exit(); } return $contents; }
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.