輸出控制函數可以用來控制腳本的輸出。這些函數在某些特殊情況下很有用,特別是腳本中已經輸出了訊息之後再想向瀏覽器傳送標頭的情況。輸出控制函數不會作用於
header() 或 setcookie()
函數傳送的標頭,而只會影響類似於 echo()
函數輸出的訊息和內嵌在 PHP 代碼之間的訊息。
本增加模組作為 PHP 內核的一部分,無需安裝即可使用。
這些函數的行為受 php.ini 的影響。
表格 1. 輸出控制配置選項
名稱 | 預設值 | 作用範圍 | 修正記錄 |
---|
output_buffering | "0" | PHP_INI_PERDIR | |
output_handler | NULL | PHP_INI_PERDIR | 自 PHP 4.0.4 起可用 |
implicit_flush | "0" | PHP_INI_ALL | 在 PHP <= 4.2.3 版本中是 PHP_INI_PERDIR |
有關 PHP_INI_* 常量進一步的細節與定義參見
附錄 G。
以下是配置選項的簡要解釋。
- output_buffering
boolean/integer
該選項設定為 On
時,將在所有的腳本中使用輸出控制。若果要限制輸出緩沖區的最大值,可將該選項設定為特殊的最大位元組數(例如
output_buffering=4096)。從PHP
4.3.5 版開始,該選項在 PHP-CLI 下總是為 Off。
- output_handler
string
該選項可將腳本所有的輸出,重導至一個函數。例如,將 output_handler
設定為 mb_output_handler()
時,字元的編碼將被修改為特殊的編碼。設定的任何處理函數,將自動的處理輸出緩衝。
- implicit_flush
boolean
預設為 FALSE。如將該選項改為 TRUE,PHP
將使輸出層,在每段訊息塊輸出後,自動重整。這等同於在每次使用
print()、echo()
等函數或每個 HTML 塊之後,呼叫 PHP 中的
flush() 函數。
不在web環境中使用 PHP
時,開啟這個選項對程式執行的效能有嚴重的影響,通常只推薦在除錯時使用。在
CLI SAPI 的執行模式下,該旗標預設為 TRUE。
參見 ob_implicit_flush()。
例子 1. 輸出控制例子
<?php
ob_start(); echo "Hello\n";
setcookie("cookiename", "cookiedata");
ob_end_flush();
?>
|
|
在上面的例子中,函數 echo()
輸出訊息將被儲存在輸出緩衝中,直到
ob_end_flush()
函數被呼叫。和期望的一樣,setcookie()
函數存儲 cookie
的時候沒有導致錯誤(通常情況下,已經有資料輸出後,是不能標準地向瀏覽器傳送標頭的)。
注:
當從 PHP 4.1(內含 4.2)升級到 4.3 時,由於早期版本的 bug,必須確保在
php.ini 中將implict_flush 設定成
OFF,否則所有由
ob_start() 函數處理的訊息都會被直接輸出。