ob_start

(PHP 4, PHP 5)

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

説明

bool ob_start ( [callback output_callback [, int chunk_size [, bool erase]]] )

この関数は出力のバッファリングをオンにします。出力のバッファリングが アクティブの場合、(ヘッダ以外の)スクリプトからの出力は実際に は行われず、代わりに内部バッファに追加されます。

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

オプションの引数output_callback関数を指定 することが可能です。この関数は、パラメータとして文字列をとり、文字列を返します。 このコールバック関数は、 ob_end_flush() がコールされた際、または、リクエストの 最後にブラウザに出力をフラッシュする際にコールされます。 output_callbackがコールされた際に、この関数は、 出力バッファの内容をパラメータとして受取ります。このコールバック関数は、 新規の出力バッファを実際に出力される結果として返す必要があり、この結果は ブラウザに送信されます。 output_callbackがコール可能な関数ではない場合 FALSEを返します。 If the callback function has two parameters, the second parameter is filled with a bit-field consisting of PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT and PHP_OUTPUT_HANDLER_END.

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

注意: PHP4.3.2未満では、この関数は、渡された output_callbackを実行することができなくても FALSEを返しませんでした。

警告

Some web servers (e.g. Apache) change the working directory of a script when calling the callback function. You can change it back by e.g. chdir(dirname($_SERVER['PHP_SELF'])) in the callback function.

If the optional parameter chunk_size is passed, the callback function is called on every first newline after chunk_size bytes of output. The output_callback parameter may be bypassed by passing a NULL value.

If the optional parameter erase is set to FALSE, the buffer will not be deleted until the script finishes (as of PHP 4.3.0).

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

例 1. ユーザ定義のコールバック関数の例

<?php

function callback($buffer)
{

  
// apples を全て oranges に置換する
  
return (ereg_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>

ob_get_contents(), ob_end_flush(), ob_end_clean(), ob_implicit_flush(), ob_gzhandler(), ob_iconv_handler() mb_output_handler(), ob_tidyhandler() も参照ください。