• PHP
【PHP】出力バッファリング制御

出力バッファリング制御は知っている人は良く使うけど、知らない人は全く使わないという偏りがある関数群ですが、知っていると便利です。

出力バッファリングってなに?

出力バッファリングは「画面にすぐ表示せず、ためておく技術」

「すぐ表示」とは?

echoprintvar_dump()、それからHTMLそのものも、
PHPが読み込んでる最中に直接「標準出力(STDOUT)」に流れていく出力のこと

PHPは通常、echoやprintで出力した内容を即座にクライアント(ブラウザ)に送ります

[ブラウザ] → HTTPリクエスト(GETとかPOST) → [Webサーバー] → [PHP処理] → 出力(HTML) → [ブラウザで表示]

PHPがどう処理するか

サーバーにある PHP ファイルにアクセスしたときの裏側!

🔁 例:http://localhost/index.php にアクセス

  1. ブラウザが Webサーバー(Apache/Nginx)に「GET /index.php」というリクエストを送る
  2. Webサーバーは .php ファイルを見て、「これはPHPで処理しなきゃ」と判断
  3. PHP実行エンジン(PHPインタプリタ)が index.php を実行
  4. PHPの中で echo や HTMLを出力すると、「標準出力(stdout)」に書かれる

それが Webサーバーを通じてHTTPレスポンスとしてブラウザに返される!

「標準出力」ってなんなの?

PHPはコマンドラインでも使えるから、そのときは echo はそのままターミナルに出力される。
でもWeb経由のPHPの場合は:

「標準出力」=「クライアント(ブラウザ)に送るHTTPレスポンス本文」

出力種別どこに出る?すぐ表示?備考
echo, print, HTML標準出力(stdout)✅ すぐ表示ブラウザに出る
var_dump()標準出力✅ すぐ表示デバッグ用
fwrite(STDERR)エラー出力❌ 表示されないCLIで使うことが多い
file_put_contents()ファイル❌ 表示されないログや保存用
mail()メール❌ 表示されないサーバーから外部に送る
setcookie()ヘッダー出力❌ 表示されないbodyより先に送る必要あり

🔽 出力バッファリングを使うと

  • 出力内容を一時的にメモリ上にためておいて
  • あとからまとめて送る、あるいは加工してから送ることができる!
関数名説明
ob_start()出力バッファリングを開始する
ob_get_contents()バッファにたまっている内容を取得する
ob_end_clean()バッファの内容を消してバッファリングを終了
ob_end_flush()バッファ内容を出力してからバッファリング終了
ob_clean()バッファ内容を消去(バッファリングは継続)
ob_flush()バッファ内容を出力(バッファリングは継続)

バッファ処理が使われる主な理由

テンプレートキャプチャ

ob_start();
include 'template.php';
$content = ob_get_clean(); // テンプレートの出力を文字列として取得

出力のタイミング制御(headerより前に出力があった時)

ob_start();
echo "処理開始";
header("Location: /done.php"); // ← バッファがなければエラーになる
ob_end_flush();