デフォルトでは、 Echoまたはその他の出力コマンドは、コンテンツをクライアント(ブラウザ)に直接送信します。ただし、出力バッファリングをオンにした後、出力はすぐに送信されませんが、最初にバッファーに保存され、バッファがクリアされるか、スクリプトが終了するまで出力されません。このようにして、スクリプトの実行中に出力コンテンツをキャプチャ、変更、リダイレクトすることもできます。
ob_get_contents()は、現在の出力バッファーのコンテンツを取得し、文字列を返すために使用されます。出力バッファリングが有効になっていない場合、関数の呼び出しがfalseを返します。
<?php
// 出力バッファリングをオンにします
ob_start();
// アナログ出力コンテンツ
echo "これがバッファにあるものです。";
// バッファコンテンツを取得します
$content = ob_get_contents();
// コンテンツを処理します,たとえば、文字列を交換します
$processedContent = str_replace("バッファ", "キャッシュ領域", $content);
// 清空并关闭バッファ(オプション,使用することもできます ob_end_flush() 直接出力)
ob_end_clean();
// 処理されたコンテンツを手動で出力します
echo $processedContent;
?>
上記の例:
OB_START()を使用して、出力バッファリングを有効にします。
エコーを使用したコンテンツ出力はバッファに保存されます。
ob_get_contents()を介してバッファコンテンツを変数$コンテンツに読み取ります。
コンテンツを文字列に置き換えて、 $ ProcessedContentを取得します。
OB_END_CLEAN()を使用して、バッファをクリアして閉じて、コンテンツの繰り返し出力を防ぎます。
最後に、処理されたコンテンツを手動で出力します。
シンプルなPHPテンプレートレンダリングを使用し、テンプレート出力をキャプチャしてからキャッシュまたは変更する場合、出力バッファリングは非常に便利です。
<?php
ob_start();
include 'template.php'; // テンプレートファイル出力 HTML
$html = ob_get_contents();
ob_end_clean();
// 右 $html キャッシュ、圧縮またはその他の処理
file_put_contents('cache/page.html', $html);
// 最後に、処理されたページを出力します
echo $html;
?>
一部のサードパーティライブラリはコンテンツを直接出力しますが、これらの出力、均一な形式、またはパッケージング処理を傍受する必要があります。
<?php
ob_start();
third_party_function(); // 直接出力内容的函数
$output = ob_get_contents();
ob_end_clean();
// たとえば、パッケージはです JSON フォーマットリターン
echo json_encode(['data' => $output]);
?>
ob_get_contents()を使用する前に、バッファーがオンになっていることを確認する必要があります( ob_start()が呼び出されます)。
ob_end_clean()を呼び出すと、コンテンツを出力せずにバッファを閉じてクリアできます。 ob_end_flush()を呼び出すと、バッファーが閉じてコンテンツが出力されます。
出力バッファはネストでき、 OB_GET_CONTENTS()は現在アクティブバッファーの内容のみを取得します。
ob_get_contents()は、PHP出力プロセスを制御するための強力なツールです。出力バッファリングメカニズムと組み合わせて、テンプレートキャプチャ、出力キャッシュ、動的コンテンツの交換など、さまざまな高度な機能を実現できます。出力バッファリングの原則と使用方法を習得すると、PHP出力に対する制御が大幅に向上します。