PHP ob_start 輸出控制函數(shù)

定義和用法
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_CONTPHP_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ì)刷送

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碍拆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慨蓝,更是在濱河造成了極大的恐慌感混,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件礼烈,死亡現(xiàn)場離奇詭異弧满,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)此熬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門庭呜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滑进,“玉大人,你說我怎么就攤上這事募谎》龉兀” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵数冬,是天一觀的道長节槐。 經(jīng)常有香客問我,道長拐纱,這世上最難降的妖魔是什么铜异? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮秸架,結(jié)果婚禮上揍庄,老公的妹妹穿的比我還像新娘。我一直安慰自己咕宿,他們只是感情好币绩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著府阀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芽突。 梳的紋絲不亂的頭發(fā)上试浙,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音寞蚌,去河邊找鬼田巴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挟秤,可吹牛的內(nèi)容都是我干的壹哺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼艘刚,長吁一口氣:“原來是場噩夢啊……” “哼管宵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起攀甚,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤箩朴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后秋度,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炸庞,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年荚斯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了埠居。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片查牌。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖滥壕,靈堂內(nèi)的尸體忽然破棺而出僧免,到底是詐尸還是另有隱情,我是刑警寧澤捏浊,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布懂衩,位于F島的核電站,受9級(jí)特大地震影響金踪,放射性物質(zhì)發(fā)生泄漏浊洞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一胡岔、第九天 我趴在偏房一處隱蔽的房頂上張望法希。 院中可真熱鬧,春花似錦靶瘸、人聲如沸苫亦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屋剑。三九已至,卻和暖如春诗眨,著一層夾襖步出監(jiān)牢的瞬間唉匾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工匠楚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巍膘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓芋簿,卻偏偏與公主長得像峡懈,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子与斤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容