Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
ob_start() / ob_get_clean()対応: PHP 4(2000)
出力バッファリングを制御する関数です。『echo』や『print_r()』などの出力をバッファに蓄えてから一括で処理できます。
構文
// 出力バッファリングを開始します。 ob_start($callback, $chunk_size, $flags); // バッファの内容を取得します。バッファは維持されます。 ob_get_contents(); // バッファの内容を取得し、バッファリングを終了します。 ob_get_clean(); // バッファの内容を出力し、バッファリングを終了します。 ob_end_flush();
関数一覧
| 関数 | 概要 |
|---|---|
| ob_start($callback) | 出力バッファリングを開始します。以降の出力はすべてバッファに蓄えられ、画面には表示されません。コールバック関数でバッファの内容を加工することもできます。 |
| ob_get_contents() | 現在のバッファの内容を文字列として返します。バッファは削除されずそのまま維持されます。 |
| ob_get_clean() | バッファの内容を文字列として返し、同時にバッファリングを終了します。『ob_get_contents()』と『ob_end_clean()』を一度に行う関数です。 |
| ob_end_flush() | バッファの内容を出力し、バッファリングを終了します。蓄えた出力を一括で画面に表示したい場合に使用します。 |
| ob_end_clean() | バッファの内容を破棄し、バッファリングを終了します。出力は行いません。 |
| ob_get_level() | 現在のバッファリングのネストレベルを返します。バッファリングが行われていない場合は『0』を返します。 |
サンプルコード
<?php
// 基本的な出力バッファリングの使い方です。
ob_start();
echo "この出力はバッファに蓄えられます。";
echo "まだ画面には表示されていません。";
$content = ob_get_clean(); // バッファの内容を取得してバッファリングを終了します。
echo mb_strlen($content, "UTF-8") . "文字分の出力をキャプチャしました。";
// var_dump() の出力を文字列として取得します。
ob_start();
var_dump(['PHP', 'JavaScript', 'Python']);
$debug = ob_get_clean();
error_log($debug); // デバッグ情報をログに記録します。
// HTMLテンプレートの生成に活用する例です。
function render_card($title, $body) {
ob_start();
echo '';
echo '' . htmlspecialchars($title) . '
';
echo '' . htmlspecialchars($body) . '
';
echo '';
return ob_get_clean();
}
$html = render_card("お知らせ", "サイトをリニューアルしました。");
echo $html;
// header() 送信前にバッファリングで出力を抑制する例です。
ob_start();
echo "この出力はリダイレクト前に破棄されます。";
ob_end_clean(); // バッファを破棄します。
header("Location: /login.php");
exit;
// コールバックで出力を加工する例です。
ob_start(function ($buffer) {
return mb_strtoupper($buffer); // 出力をすべて大文字に変換します。
});
echo "hello world";
ob_end_flush(); // 『HELLO WORLD』と出力されます。
概要
『ob_start()』は出力バッファリングを開始し、以降の『echo』や『print_r()』などの出力をメモリ上のバッファに蓄える関数です。蓄えた出力は『ob_get_clean()』で文字列として取得したり、『ob_end_flush()』で一括出力できます。
出力バッファリングの代表的な用途は、『var_dump()』の出力を文字列として取得すること、HTMLテンプレートの部分描画、そして『header()』送信前の出力抑制です。PHPでは『header()』や『setcookie()』の呼び出し前に何らかの出力があるとエラーになりますが、出力バッファリングを使えばこの問題を回避できます。
バッファリングはネストすることもでき、『ob_get_level()』で現在の深さを確認できます。デバッグ出力については『var_dump()』、基本的な出力については『echo / print』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。