PHP輸出緩衝及其應用

來源:互聯網
上載者:User
緩衝(buffer)是為了協調吞吐速度相差很大的裝置之間資料傳送而採用的技術,用來存放緩衝資料的地區叫緩衝區,在電腦科學領域,當資料從一個地方傳送到另一個地方時,緩衝區被用來臨時儲存資料。與緩衝相似的一個技術是緩衝(cache),它們都是為瞭解決資料存放區和傳輸速度不同而帶來的問題,不同的是,緩衝主要在寫時使用,而緩衝主要用來在讀時使用。

如,是一個簡易的緩衝區類比圖,左端入口的資料具有單個輸入體積小,速度快,數量多,但右端輸出資料具有體積大,速度慢的特點。如果沒有緩衝區,很容易造成資料堵塞,有了緩衝區之後,當資料填滿緩衝區,再統一輸出,則可以大大減少系統負擔。

PHP在執行的過程中,嵌入的HTML代碼,’echo’,’print_r’等指令都是一次資料輸出,正是因為有緩衝區的存在,系統可以在php執行完之後再一次把資料發送給瀏覽器,運行如下代碼:

標題

發現瀏覽器是同時顯示所有內容,而不是先顯示第一行和第二行資料,等待5秒後再顯示後面的資料。不僅這樣,PHP的緩衝區還提供給我們更加強大的功能,我們可以在資料發送之前對其作出捕獲,更改等。PHP提供給我們”ob_”系列函數,例如如下代碼,可以對某些字元進行替換:

 

上面中的ob_start,ob_get_contents,ob_end_clean分別用來開啟使用者緩衝區,擷取緩衝內容和關閉緩衝區,PHP中所有的輸出控制函數有:

flush — 重新整理輸出系統緩衝

ob_clean — 清空(擦掉)輸出緩衝區

ob_end_clean — 清空(擦除)緩衝區並關閉輸出緩衝

ob_end_flush — 沖刷出(送出)輸出緩衝區內容並關閉緩衝

ob_flush — 沖刷出(送出)輸出緩衝區中的內容

ob_get_clean — 得到當前緩衝區的內容並刪除當前輸出緩。

ob_get_contents — 返回輸出緩衝區的內容

ob_get_flush — 刷出(送出)緩衝區內容,以字串形式返回內容,並關閉輸出緩衝區。

ob_get_length — 返回輸出緩衝區內容的長度

ob_get_level — 返回輸出緩衝機制的嵌套層級

ob_get_status — 得到所有輸出緩衝區的狀態

ob_gzhandler — 在ob_start中使用的用來壓縮輸出緩衝區中內容的回呼函數。ob_start callback function to gzip output buffer

ob_implicit_flush — 開啟/關閉絕對刷送

ob_list_handlers — 列出所有使用中的輸出處理常式。

ob_start — 開啟輸出控制緩衝

output_add_rewrite_var — 添加URL重寫器的值(Add URL rewriter values)

output_reset_rewrite_vars — 重設URL重寫器的值(Reset URL rewriter values)

php中,可以通過php.ini的output_buffering來設定緩衝,On表示無窮大,Off表示關閉,數字則表示緩衝區的大小(以位元組為單位),預設大小是4KB,如果設定成off,則樣本一的代碼是不是就可以分段在瀏覽器顯示了呢?答案是否定的,有兩點需要注意,第一點即使把PHP的緩衝關閉,php輸出在系統層面也有緩衝(可以理解為Linux系統stdout的緩衝),必須通過flush函數輸出;第二點是一些有些瀏覽器對一次接收的文字長度有限制,如果太少,則不予顯示。所以這樣的代碼可以分段顯示:

標題

當然在實際生產環境,直接把output_buffering關閉的情況比較少見,我們可以通過ob_系列函數來進行操作,下面的例子是利用緩衝進行伺服器推送(comet)的樣本。如下代碼可以給用戶端進行資訊推送:

 

參考資料

  1. Output Control 函數

  2. 關於php_buffering的疑問

  • 相關文章

    聯繫我們

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