ob_start

関数の概要

ob_start は、PHPの出力バッファリングを開始するための関数です。通常、PHPスクリプトは出力が行われると即座にブラウザに送信されますが、この関数を使うと、出力内容を一時的にバッファ(メモリ上の領域)にためることができます。これにより、出力内容を加工したり、後でまとめて送信したりすることが可能になります。

パラメータの説明

  • callback(コールバック関数):バッファの内容を受け取り、加工して返すユーザー定義関数を指定します。省略可能。
  • chunk_size(整数):バッファのチャンクサイズをバイト単位で指定します。省略可能です。
  • flags(整数):出力コントロールの動作を指定するフラグです。例えば PHP_OUTPUT_HANDLER_START など。省略可能です。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。通常は問題なくバッファリングが開始できれば TRUE となります。

使用例

基本的な使い方

<?php
ob_start(); // 出力バッファリングの開始

echo "こんにちは、世界!";

$content = ob_get_contents(); // バッファの内容を取得
ob_end_clean(); // バッファをクリアして終了

echo "バッファの中身: " . $content;
?>

この例では、まず ob_start() でバッファリングを開始し、echoで出力した内容をすぐには画面に送らずバッファにためます。ob_get_contents() でバッファ中身を取得し、ob_end_clean() でバッファを破棄。最後にバッファ内容を別の文字列として表示しています。

出力内容を加工するコールバック関数を使う例

<?php
function add_footer($buffer) {
    return $buffer . "<footer>フッター情報</footer>";
}

ob_start("add_footer");

echo "<h1>タイトル</h1>";
echo "<p>コンテンツ本文です。</p>";

ob_end_flush(); // バッファの内容を加工して出力
?>

バッファリング時にコールバック関数を指定することで、出力内容の最後にフッターを自動的に追加しています。ob_end_flush() で加工済みの内容をブラウザに送信します。

ネストしたバッファリングの例

<?php
ob_start();

echo "最初の出力";

ob_start();

echo "ネストした出力";

$nested = ob_get_clean();

echo "ネストしたバッファ内容: " . $nested;

$content = ob_get_clean();

echo "最終出力: " . $content;
?>

複数のバッファを入れ子にして使えます。内側のバッファは ob_get_clean() で取得して終了し、その内容を外側のバッファに組み込んでいます。

関連する関数

  • ob_end_clean() – バッファリングを終了し、バッファ内容を破棄する
  • ob_end_flush() – バッファリングを終了し、バッファ内容を出力して送信する
  • ob_get_contents() – 現在のバッファ内容を取得する
  • ob_get_clean() – バッファ内容を取得し、バッファリングを終了する
  • ob_flush() – バッファ内容を送信するがバッファは終了しない

まとめ

ob_start() はPHPで出力バッファリングを開始するために使い、出力をすぐブラウザに送らず一時的にためておける便利な関数です。コールバック関数で出力の加工もできるため、実務でのテンプレート制御やレスポンス編集に役立ちます。適切にバッファを管理して、効率的な出力制御を実現しましょう。