出力制御 関数
PHP Manual

ob_start

(PHP 4, PHP 5)

ob_start出力のバッファリングを有効にする

説明

bool ob_start ([ callable $output_callback [, int $chunk_size = 0 [, bool $erase = true ]]] )

この関数は出力のバッファリングをオンにします。 出力のバッファリングを有効にすると、 (ヘッダ以外の) スクリプトからの出力は実際には行われず、 代わりに内部バッファに保存されます。

この内部バッファの内容は、ob_get_contents() を用いて文字列変数にコピーされます。 内部バッファの内容を出力するには ob_end_flush() を使用します。 ob_end_clean() は、バッファの内容を出力せずに消去します。

警告

web サーバーによっては (例: Apache)、コールバック関数からコールされた際に、 スクリプトの実行ディレクトリを変更するものがあります。 コールバック関数の内部で chdir(dirname($_SERVER['SCRIPT_FILENAME'])) などと指定することで、これをもとに戻すことが可能です。

出力バッファはスタッカブルであり、このため、他の ob_start() がアクティブの間に ob_start() をコールすることが可能です。この場合、 ob_end_flush() を適切な回数コールするようにしてください。 複数の出力コールバック関数がアクティブの場合、 ネストした順番で逐次連続的に出力がフィルタ処理されます。

パラメータ

output_callback

オプションの引数 output_callback 関数を指定することが可能です。この関数は、パラメータとして文字列をとり、 文字列を返します。このコールバック関数は、 出力バッファがフラッシュ (送信) あるいは消去 (ob_flush(), ob_clean() あるいは同等の関数で) された場合、 またはリクエストの最後にブラウザに出力をフラッシュする際にコールされます。 output_callback がコールされた際に、 この関数は出力バッファの内容をパラメータとして受け取ります。このコールバック関数は、 新規の出力バッファを実際に出力される結果として返す必要があり、 この結果はブラウザに送信されます。 output_callback がコール可能な関数ではない場合は FALSE を返します。

コールバック関数が 2 つの引数をとる場合、 2 番目のパラメータは以下のビットフィールド PHP_OUTPUT_HANDLER_STARTPHP_OUTPUT_HANDLER_CONT および PHP_OUTPUT_HANDLER_END を含みます。

output_callbackFALSE を返すと、元の入力がそのままブラウザに送信されます。

output_callback パラメータに NULL 値を渡すと、 これをバイパスすることができます。

ob_end_clean()ob_end_flush()ob_clean()ob_flush() および ob_start() をコールバック関数の内部からコールすることはできません。 実際にコールした際の挙動は未定義です。バッファの内容を消去したい際には、 コールバック関数から "" (空文字列) を返してください。 同じく、print_r($expression, true)highlight_file($filename, true) のような 出力バッファリング関数も、 コールバック関数の内部からコールすることはできません。

注意:

PHP 4.0.4 において、Web ページの圧縮をサポートする圧縮 gz エンコード されたデータの Web ブラウザへの送信を容易にするために ob_gzhandler() がサポートされています。 ob_gzhandler() は、ブラウザが受け入れる content encoding の型を調べ、それに基づいて出力を返します。

chunk_size

オプションのパラメータ chunk_size が渡された場合、 バッファの長さが chunk_size バイトを超えるたびに、 出力の後でバッファがフラッシュされます。 デフォルト値は 0 で、これは出力関数がコールされるのが 出力バッファが閉じたときだけであることを意味します。

PHP 5.4.0 より前のバージョンでは、1 にも特別な意味があり、 これを指定するとチャンクサイズが 4096 バイトになります。

erase

オプションのパラメータ eraseFALSE を指定すると、 スクリプトが終了するまでバッファは削除されません。その結果、 flush 関数や clean 関数がコールされると notice が発生し、FALSE を返すようになります。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

変更履歴

バージョン 説明
5.4.0 チャンクサイズに 1 を指定したときに、 1 バイトのチャンクを出力バッファに送るようになりました。
4.3.2 output_callback を実行することができない場合に FALSE を返すように変更されました。
4.2.0 erase パラメータが追加されました。

例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>

参考


出力制御 関数
PHP Manual