ob_get_contents

関数の概要

ob_get_contents は、PHPの出力バッファリング機能を利用して、現在の出力バッファの内容を文字列として取得する関数です。出力したい内容をすぐに画面に出さずにバッファ内に保持し、その内容を後から取得・操作したい場合に便利です。WordPressなどのフレームワークでもカスタムな出力制御を行う際によく使われます。

パラメータの説明

  • なしob_get_contents はパラメータを取りません。

戻り値

現在の出力バッファの内容を文字列として返します。もし出力バッファが開始されていない場合やバッファが存在しない場合は false を返します。

使用例

基本的な使い方

<?php
ob_start(); // 出力バッファを開始
echo "Hello, World!";
$content = ob_get_contents(); // バッファ内容を取得
ob_end_clean(); // バッファをクリアし、出力しない
echo "取得した内容は: " . $content;
?>

この例では、”Hello, World!” の出力を直接画面に出さずにバッファに保存し、その内容を変数に取得。その後、バッファをクリアして、変数の内容を画面に表示しています。

HTMLテンプレートの一部を取得する場合

<?php
ob_start();
?>
<div>
  <h1>タイトル</h1>
  <p>これはテンプレートの一部です。</p>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();

echo "テンプレート内容を取得しました:
"; echo htmlspecialchars($html); ?>

HTMLの一部をバッファリングで取得し、文字列として扱うことも可能です。取得したHTMLを加工したり、メール送信の本文に利用したりできます。

出力を加工してから出力する例

<?php
ob_start();
echo "今の時間は " . date('H:i:s') . " です。";
$output = ob_get_contents();
ob_end_clean();

$output = str_replace("時間", " 時間 ", $output);
echo $output;
?>

一旦バッファで出力をためて、文字列を加工したあとに画面に出力する例です。こうすることで動的に生成した出力を自由に編集できます。

関連する関数

  • ob_start() – 出力バッファリングを開始する
  • ob_end_clean() – 出力バッファを破棄して閉じる
  • ob_end_flush() – バッファを画面に出力して閉じる
  • ob_flush() – バッファ内容を出力してバッファを空にする
  • ob_get_flush() – バッファ内容を取得して出力し、バッファを閉じる

まとめ

ob_get_contents はPHPの出力バッファの内容を取得するためのシンプルかつ便利な関数です。バッファリングを使うことで、出力のタイミングや内容をコントロールしやすくなり、特にテンプレート処理や動的な出力操作、カスタムキャッシュ実装などで重宝します。必ず ob_start() でバッファを開始してから使うこと、使用後は ob_end_clean() または ob_end_flush() でバッファを閉じてリソースを解放することを覚えておきましょう。