釋疑PHP的ob_start()函數_PHP教程

來源:互聯網
上載者:User
php ob_start 與 ob_end_flush() 是 php 的緩衝輸出函數。

ob_start([string output_callback])- 開啟輸出緩衝區,所有的輸出資訊不在直接發送到瀏覽器,而是儲存在輸出緩衝區裡面,可選得回呼函數用於處理輸出結果資訊。

ob_end_flush - 結束(發送)輸出緩衝區的內容,關閉輸出緩衝區。

php 輸出東西,會儲存在一個 php 維護的記憶體裡,稱為 buffer 也行,緩衝也行,都是一個意思。然後當這個 buffer 滿了,php 會自動往 web server 發送這些資料。

也就是說每次 echo,並不一定會輸出東西,而是儲存在 buffer 裡。

ob_start() 的意思,可以理解為(但是實際上和我下面的說法有區別),這個 buffer 由 ob_ 系列函數來來控制,也就是,PHP 不會維護自己的 buffer,不會自動把buffer 的內容自動發送到 web server,直到你 ob_end() 或者類似的 ob 操作。

ob_函數一般用來捕獲當前的輸出,跟效率是沒什麼關係的。至於為什麼捕獲輸出,原因很多,例如我捕捉輸出,緩衝到一個檔案裡,下次請求就可以直接讀這個 cache 檔案的內容作為輸出了。

ob_start();內容echo ob_get_contents() ;

就是類似上面這樣的代碼了,說白了沒有任何意義的代碼。

我仔細想過之後,然後上網搜尋了一下,發現相當多的初學者(技術上的初學者,不一定是PHP第一年生,有的人一輩子是初學者),並不理解ob的作用,只是網上經常把ob叫做輸出緩衝,輸出緩衝,所以相當多的人就把ob系列函數當作是加快PHP頁面顯示的工具。

其實ob是output buffering的簡稱,而不是output cache,ob用對了是能對速度有一定的協助,但是盲目的加上ob函數,只會增加CPU額外的負擔。下面我說說ob的基本作用。

  1. 防止在瀏覽器有輸出之後再使用setcookie,或者header,session_start函數造成的錯誤。(我本以為最開始說的代碼是這樣的作用,但後來朋友說不是的),其實這樣的用法少用為好,養成良好的代碼習慣。
  2. 捕捉對一些不可擷取的函數的輸出,比如phpinfo會輸出一大堆的HTML,但是我們無法用一個變數例如$info=phpinfo();來捕捉,這時候ob就管用了。
  3. 對輸出的內容進行處理,例如進行gzip壓縮,例如進行簡繁轉換,例如進行一些字串替換。
  4. 產生靜態檔案,其實就是捕捉整頁的輸出,然後存成檔案,經常在產生HTML,或者整頁緩衝中使用。

對於剛才說的第三點中的GZIP壓縮,可能是很多人想用,卻沒有真真用上的,其實稍稍修改下我朋友的代碼,就可以實現頁面的gzip壓縮。

ob_start(ob_gzhandler);內容

沒錯,加一個ob_gzhandler這個回呼函數就可以了,不過這麼做有些小問題,一是需要zlib支援,二是沒有判斷瀏覽器是否支援gzip(現在好像都支援,iphone瀏覽器好像都支援了)。

以前的做法是判斷一下瀏覽器是否支援gzip,然後用第三方的gzip函數來壓縮ob_get_contents() 的內容,最後echo。

http://www.bkjia.com/PHPjc/752507.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752507.htmlTechArticlephp ob_start 與 ob_end_flush() 是 php 的緩衝輸出函數。 ob_start([string output_callback])- 開啟輸出緩衝區,所有的輸出資訊不在直接發送到瀏覽器,而...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.