2024 PHP Conference Japan

ob_get_flush

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

ob_get_flush 刷新(發送)目前輸出處理器的返回值,返回目前輸出緩衝區的內容並關閉它

說明

ob_get_flush(): 字串|false

此函式會呼叫輸出處理器(使用 PHP_OUTPUT_HANDLER_FINAL 旗標),刷新(發送)其返回值,返回目前輸出緩衝區的內容,並關閉目前輸出緩衝區。

如果沒有使用 PHP_OUTPUT_HANDLER_REMOVABLE 旗標啟動的目前輸出緩衝區,ob_get_flush() 將會失敗。

ob_get_flush() 會清空(送出)輸出處理器的返回值,即使啟用的輸出緩衝區是在沒有 PHP_OUTPUT_HANDLER_FLUSHABLE 旗標的情況下啟動的。

參數

此函數沒有參數。

返回值

成功時返回啟用輸出緩衝區的內容,失敗時返回 false

錯誤/異常

如果函數失敗,它會產生一個 E_NOTICE

範例

範例 #1 ob_get_flush() 範例

<?php
//使用 output_buffering=On
print_r(ob_list_handlers());

//將緩衝區儲存到檔案中
$buffer = ob_get_flush();
file_put_contents('buffer.txt', $buffer);

print_r(ob_list_handlers());
?>

上述範例將輸出

Array
(
    [0] => default output handler
)
Array
(
)

參見

新增筆記

使用者貢獻的筆記 3 則筆記

34
info at pcdoctor dot fr
16 年前
嗨,
這只是為了補充一個我一開始沒理解的行為。

ob_get_flush 實際上會將緩衝區的內容作為文字返回,但它也會將緩衝區發送回瀏覽器,以便顯示在使用者螢幕上。

如果您不希望將緩衝區發送給使用者,請使用 ob_get_clean
-3
taras dot dot dot di at gmail dot com
16 年前
我不知道這究竟是如何運作的,但如果您呼叫此函數,PHP 的行為會像標頭已發送一樣(即使輸出已轉到字串)。

這表示您無法呼叫此函數,然後再呼叫例如 setcookie。

這已透過反覆試驗驗證
-5
zubin@byron
19 年前
更正之前的貼文:ob_get_clean() 更好,例如

<?php
// 開始產生 HTML
$html = '<html><head>'; // 等等
// 開始輸出緩衝
ob_start();
// 呼叫會立即輸出的函式
print_menu();
// 將其附加到 $html 並清空緩衝區
$html .= ob_get_clean();
?>
To Top