定義和用法
ob_start - 打開輸出控制緩沖
版本支持
PHP4 PHP5 PHP7
支持 支持 支持
4.3.2 在傳遞的 output_callback 不能被執(zhí)行時(shí)宅楞,此函數(shù) 被改成返回 FALSE
4.2.0 添加了 erase 參數(shù)。
語法
ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
此函數(shù)將打開輸出緩沖。當(dāng)輸出緩沖激活后罐韩,腳本將不會(huì)輸出內(nèi)容(除http標(biāo)頭外),相反需要輸出的內(nèi)容被存儲(chǔ)在內(nèi)部緩沖區(qū)中污朽。內(nèi)部緩沖區(qū)的內(nèi)容可以用 ob_get_contents() 函數(shù)復(fù)制到一個(gè)字符串變量中散吵。 想要輸出存儲(chǔ)在內(nèi)部緩沖區(qū)中的內(nèi)容,可以使用 ob_end_flush() 函數(shù)蟆肆。另外矾睦, 使用 ob_end_clean() 函數(shù)會(huì)靜默丟棄掉緩沖區(qū)的內(nèi)容。
注意:當(dāng)有正在調(diào)用的回調(diào)函數(shù)時(shí)炎功,一些網(wǎng)絡(luò)服務(wù)器(例如Apache)會(huì)改變一個(gè)腳本的工作目錄枚冗。 你可以在回調(diào)函數(shù)中再把它改回來,例如 chdir(dirname($_SERVER['SCRIPT_FILENAME'])) 蛇损。
輸出緩沖區(qū)是可堆疊的赁温,這即意謂著,當(dāng)有一個(gè) ob_start() 是活躍的時(shí)淤齐, 你可以調(diào)用另一個(gè) ob_start() 股囊。 只要確保又正確調(diào)用了 ob_end_flush() 恰當(dāng)?shù)拇螖?shù)即可。 如果有多重輸出回調(diào)函數(shù)是活躍的更啄,輸出內(nèi)容會(huì)一直按嵌套的順序依次通過它們而被過濾稚疹。
參數(shù)
參數(shù) | 必需的 | 描述 |
---|---|---|
output_callback | 否 | 可選參數(shù) output_callback 函數(shù)可以被指定。 此函數(shù)把一個(gè)字符串當(dāng)作參數(shù)并返回一個(gè)字符串祭务。 當(dāng)輸出緩沖區(qū)被( ob_flush(), ob_clean() 或者相似的函數(shù))沖刷(送出)或者被清洗的時(shí)候内狗;或者在請(qǐng)求結(jié)束之際輸出緩沖區(qū)內(nèi)容被沖刷到瀏覽器的時(shí)候該函數(shù)將會(huì)被調(diào)用。 當(dāng)調(diào)用 output_callback 時(shí)义锥,它將收到輸出緩沖區(qū)的內(nèi)容作為參數(shù) 并預(yù)期返回一個(gè)新的輸出緩沖區(qū)作為結(jié)果柳沙,這個(gè)新返回的輸出緩沖區(qū)內(nèi)容將被送到瀏覽器。 如果這個(gè) output_callback 不是一個(gè)可以調(diào)用的函數(shù)缨该,此函數(shù) 會(huì)返回 FALSE 偎行。如果回調(diào)函數(shù)有兩個(gè)參數(shù),第二個(gè)參數(shù)會(huì)由一個(gè)位域補(bǔ)充,該位域由 PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT 和 PHP_OUTPUT_HANDLER_END 組成蛤袒。如果 output_callback 返回 FALSE 熄云,其原來的輸入 內(nèi)容被直接送到瀏覽器。這個(gè)參數(shù) output_callback 可以通過直接給一個(gè) NULL 值而避開妙真。ob_end_clean(), ob_end_flush(), ob_clean(),ob_flush() 和 ob_start() 不能從一個(gè)回調(diào)函數(shù)中調(diào)用缴允。 如果從回調(diào)函數(shù)中調(diào)用了它們,產(chǎn)生的行為是不明確的珍德。 如果想要?jiǎng)h除緩沖區(qū)的內(nèi)容练般,從回調(diào)函數(shù)中返回一個(gè)"" (空字符串)。 更不能從一個(gè)回調(diào)函數(shù)中使用像print_r($expression, true) 或 highlight_file($filename, true) 一樣的輸出緩沖函數(shù)锈候。 |
chunk_size | 否 | 如果可選參數(shù) chunk_size 被賦值了薄料,在任何一個(gè)能引起緩沖區(qū)的長度等于 或超過 chunk_size 的輸出操作后,緩沖區(qū)都會(huì)被刷送泵琳。 默認(rèn)值 0 意味著函數(shù)僅在最后被調(diào)用摄职,其余的特殊值可以將 chunk_size 從 1 設(shè)定到 4096。 |
erase | 否 | 如果可選參數(shù) erase 被賦成 FALSE获列,直到腳本執(zhí)行完成緩沖區(qū)才被刪除谷市。 這使得,如果調(diào)用了沖刷和清洗(清除)函數(shù)击孩,會(huì)拋出一個(gè)“notice”,并返回 FALSE 值迫悠。 |
注意: 在PHP 4.0.4中, ob_gzhandler() 被引入是為了簡化把gz編碼過 數(shù)據(jù)發(fā)送到支持壓縮網(wǎng)頁的瀏覽器巩梢。 ob_gzhandler() 會(huì)判定瀏覽器可以接受哪種類型的編碼內(nèi)容创泄,并返回相應(yīng) 的輸出。ob_gzhandler() 函數(shù)需要 zlib 擴(kuò)展支持且改。
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();
相關(guān)函數(shù)
ob_end_clean() - 清空(擦除)緩沖區(qū)并關(guān)閉輸出緩沖
ob_end_flush() - 沖刷出(送出)輸出緩沖區(qū)內(nèi)容并關(guān)閉緩沖
ob_get_flush() - 刷出(送出)緩沖區(qū)內(nèi)容验烧,以字符串形式返回內(nèi)容,并關(guān)閉輸出緩沖區(qū)又跛。
ob_get_contents() - 返回輸出緩沖區(qū)的內(nèi)容
ob_implicit_flush() - 打開/關(guān)閉絕對(duì)刷送