出力バッファリング制御は知っている人は良く使うけど、知らない人は全く使わないという偏りがある関数群ですが、知っていると便利です。
Contents
出力バッファリングってなに?
出力バッファリングは「画面にすぐ表示せず、ためておく技術」
「すぐ表示」とは?
echo や print や var_dump()、それからHTMLそのものも、
PHPが読み込んでる最中に直接「標準出力(STDOUT)」に流れていく出力のこと
PHPは通常、echoやprintで出力した内容を即座にクライアント(ブラウザ)に送ります
[ブラウザ] → HTTPリクエスト(GETとかPOST) → [Webサーバー] → [PHP処理] → 出力(HTML) → [ブラウザで表示]
PHPがどう処理するか
サーバーにある PHP ファイルにアクセスしたときの裏側!
🔁 例:http://localhost/index.php にアクセス
- ブラウザが Webサーバー(Apache/Nginx)に「GET /index.php」というリクエストを送る
- Webサーバーは .php ファイルを見て、「これはPHPで処理しなきゃ」と判断
- PHP実行エンジン(PHPインタプリタ)が index.php を実行
- 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();