嗨,
這只是為了補充一個我一開始沒理解的行為。
ob_get_flush 實際上會將緩衝區的內容作為文字返回,但它也會將緩衝區發送回瀏覽器,以便顯示在使用者螢幕上。
如果您不希望將緩衝區發送給使用者,請使用 ob_get_clean
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
ob_get_flush — 刷新(發送)目前輸出處理器的返回值,返回目前輸出緩衝區的內容並關閉它
此函式會呼叫輸出處理器(使用 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 ( )
嗨,
這只是為了補充一個我一開始沒理解的行為。
ob_get_flush 實際上會將緩衝區的內容作為文字返回,但它也會將緩衝區發送回瀏覽器,以便顯示在使用者螢幕上。
如果您不希望將緩衝區發送給使用者,請使用 ob_get_clean
我不知道這究竟是如何運作的,但如果您呼叫此函數,PHP 的行為會像標頭已發送一樣(即使輸出已轉到字串)。
這表示您無法呼叫此函數,然後再呼叫例如 setcookie。
這已透過反覆試驗驗證
更正之前的貼文:ob_get_clean() 更好,例如
<?php
// 開始產生 HTML
$html = '<html><head>'; // 等等
// 開始輸出緩衝
ob_start();
// 呼叫會立即輸出的函式
print_menu();
// 將其附加到 $html 並清空緩衝區
$html .= ob_get_clean();
?>