ob_start
(PHP 4, PHP 5, PHP 7, PHP 8)
ob_start — 打開輸出控制緩衝
說明
$output_callback
= null
, int $chunk_size
= 0, int $flags
= PHP_OUTPUT_HANDLER_STDFLAGS
): bool此函式將打開輸出緩衝。當輸出緩衝啟用后,指令碼將不會輸出內容(除http標頭外),相反需要輸出的內容被儲存在內部緩衝區中。
內部緩衝區的內容可以用 ob_get_contents() 函式複製到一個字串變數中。 想要輸出儲存在內部緩衝區中的內容,可以使用 ob_end_flush() 函式。另外, 使用 ob_end_clean() 函式會靜默丟棄掉緩衝區的內容。
當有正在呼叫的回撥函式時,一些網路伺服器(例如Apache)會改變一個指令碼的工作目錄。
你可以在回撥函式中再把它改回來,例如
chdir(dirname($_SERVER['SCRIPT_FILENAME']))
。
輸出緩衝區是可堆疊的,這即意謂著,當有一個 ob_start() 是活躍的時, 你可以呼叫另一個 ob_start() 。 只要確保又正確呼叫了 ob_end_flush() 恰當的次數即可。 如果有多重輸出回撥函式是活躍的,輸出內容會一直按巢狀的順序依次通過它們而被過濾。
參數
-
output_callback
-
可選參數
output_callback
函式可以被指定。 此函式把一個字串當作參數並返回一個字串。 當輸出緩衝區被( ob_flush(), ob_clean() 或者相似的函式)沖刷(送出)或者被清洗的時候;或者在請求結束之際輸出緩衝區內容被沖刷到瀏覽器的時候該函式將會被呼叫。 當呼叫output_callback
時,它將收到輸出緩衝區的內容作為參數 並預期返回一個新的輸出緩衝區作為結果,這個新返回的輸出緩衝區內容將被送到瀏覽器。 如果這個output_callback
不是一個可以呼叫的函式,此函式 會返回false
。以下是回撥簽名:handler(string$buffer
, int$phase
= ?): string-
buffer
- 輸出緩衝區中的內容。
-
phase
-
位元掩碼
PHP_OUTPUT_HANDLER_*
常量。
如果
output_callback
返回false
,其原來的輸入 內容被直接送到瀏覽器。這個參數
output_callback
可以通過直接給一個null
值而避開。ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() 和 ob_start() 不能從一個回撥函式中呼叫。 如果從回撥函式中呼叫了它們,產生的行為是不明確的。 如果想要刪除緩衝區的內容,從回撥函式中返回一個"" (空字串)。 更不能從一個回撥函式中使用像
print_r($expression, true)
或highlight_file($filename, true)
一樣的輸出緩衝函式。注意:
ob_gzhandler() function exists to facilitate sending gz-encoded data to web browsers that support compressed web pages. ob_gzhandler() determines what type of content encoding the browser will accept and will return its output accordingly.
-
-
chunk_size
-
如果可選參數
chunk_size
被賦值了,在任何一個能引起緩衝區的長度等於 或超過chunk_size
的輸出操作后,緩衝區都會被刷送。 預設值0
意味著函式僅在最後被呼叫。PHP 5.4.0 之前,
1
是一個特殊情況下的值,代表將 chunk_size 設定為 4096 位元組。 -
flags
-
flags
參數代表了一個掩碼位,用來控制對緩衝區的操作。 The default is to allow output buffers to be cleaned, flushed and removed, which can be set explicitly viaPHP_OUTPUT_HANDLER_CLEANABLE
|PHP_OUTPUT_HANDLER_FLUSHABLE
|PHP_OUTPUT_HANDLER_REMOVABLE
, orPHP_OUTPUT_HANDLER_STDFLAGS
as shorthand.每個標誌都控制著對一組功能的訪問,詳細介紹如下:
Constant Functions PHP_OUTPUT_HANDLER_CLEANABLE
ob_clean(), ob_end_clean() 和 ob_get_clean()。 PHP_OUTPUT_HANDLER_FLUSHABLE
ob_end_flush(), ob_flush() 和 ob_get_flush()。 PHP_OUTPUT_HANDLER_REMOVABLE
ob_end_clean(), ob_end_flush() 和 ob_get_flush()。
返回值
成功時返回 true
, 或者在失敗時返回 false
。
範例
示例 #1 使用者自定義回撥函式的例子
<?php
function callback($buffer)
{
// replace all the apples with oranges
return (str_replace("apples", "oranges", $buffer));
}
ob_start("callback");
?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
ob_end_flush();
?>
以上例程會輸出:
<html> <body> <p>It's like comparing oranges to oranges.</p> </body> </html>
示例 #2 以相容 PHP 5.3 和 5.4 的方式建立一個不可擦除的輸出緩衝區
<?php
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^
PHP_OUTPUT_HANDLER_REMOVABLE);
} else {
ob_start(null, 0, false);
}
?>
參見
- ob_get_contents() - 返回輸出緩衝區的內容
- ob_end_clean() - 清空(擦除)緩衝區並關閉輸出緩衝
- ob_end_flush() - 沖刷出(送出)輸出緩衝區內容並關閉緩衝
- ob_implicit_flush() - 打開/關閉絕對刷送
- ob_gzhandler() - 在ob_start中使用的用來壓縮輸出緩衝區中內容的回撥函式。ob_start callback function to gzip output buffer
- ob_iconv_handler() - 以輸出緩衝處理程式轉換字元編碼
- mb_output_handler() - 在輸出緩衝中轉換字元編碼的回撥函式
- ob_tidyhandler() - ob_start callback function to repair the buffer