(PHP 4, PHP 5, PHP 7, PHP 8)
ob_start — 出力のバッファリングを有効にする
$callback = null, int $chunk_size = 0, int $flags = PHP_OUTPUT_HANDLER_STDFLAGS): boolこの関数は出力のバッファリングをオンにします。 出力のバッファリングが有効な間は、スクリプトからの出力は送信されず、 代わりに内部バッファに保存されます。 どの出力が影響を受けるのかについては どの出力をバッファするのか? を参照ください。
出力バッファはスタッカブルです。つまり、他のバッファがアクティブな間に ob_start() をコールできます。 複数の出力バッファがアクティブの場合、 出力はネストした順番でそれぞれのバッファを通して逐次フィルタ処理されます。 詳細は 出力バッファをネストさせる を参照ください。
出力バッファの詳細な説明は ユーザーレベルの出力バッファ を参照ください。
callback
オプションの callback として、
callable を指定できます。
null を渡すことでバイパスすることもできます。
callback は、出力バッファがフラッシュ (送信)
または消去されたとき、あるいはスクリプトの最後に出力バッファが
フラッシュされる際にコールされます。
callback のシグネチャは、次のとおりです。
bufferphasePHP_OUTPUT_HANDLER_*
定数
のビットマスク。
詳細は 出力ハンドラに渡されるフラグ
を参照ください。
callback が false
を返すと、バッファの内容が返されます。
詳細は 出力ハンドラの戻り値
を参照ください。
出力ハンドラの内部から次の関数をコールすると、 致命的なエラー (fatal error) となります。 ob_clean(), ob_end_clean(), ob_end_flush(), ob_flush(), ob_get_clean(), ob_get_flush(), ob_start()。
chunk_size
オプションのパラメータ chunk_size が渡された場合、
バッファの長さが chunk_size バイト以上になる出力があった後で、
バッファがフラッシュされます。
デフォルト値は 0 で、これはバッファがオフになるまで
すべての出力がバッファリングされることを意味します。
詳細は バッファサイズ を参照ください。
flags
flags はビットマスクで、出力バッファ上でどんな操作ができるのかを制御します。
デフォルトでは、出力バッファのクリーン、フラッシュ、削除がすべてできるようになっています。
これは、
出力バッファの制御フラグ
を経由して明示的に設定できます。
詳細は バッファに対して可能な操作
を参照ください。
各フラグが、次の表のように関数へのアクセスを制御します。
| 定数 | 関数 |
|---|---|
PHP_OUTPUT_HANDLER_CLEANABLE |
ob_clean() |
PHP_OUTPUT_HANDLER_FLUSHABLE |
ob_flush() |
PHP_OUTPUT_HANDLER_REMOVABLE |
ob_end_clean(), ob_end_flush(), ob_get_clean(), ob_get_flush() |
注意: PHP 8.4.0 より前のバージョンでは、flags パラメータに 出力ハンドラのステータスフラグ も指定可能でした。
例1 ユーザー定義のコールバック関数の例
<?php
function callback($buffer)
{
// apples を全て oranges に置換する
return (str_replace("apples", "oranges", $buffer));
}
ob_start("callback");
?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
ob_end_flush();
?>上の例の出力は以下となります。
<html> <body> <p>It's like comparing oranges to oranges.</p> </body> </html>
例2 削除不可能な出力バッファを作る例
<?php
ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_REMOVABLE);
?>