ユーザーレベルの出力バッファ目次ユーザレベルの出力バッファは、 PHP コードから開始、操作、終了することができます。 バッファは、出力バッファと関連する出力ハンドラ関数を含みます。 出力バッファをオンにする出力バッファリングは、php.ini 設定 output_buffering と output_handler を設定するか、ob_start 関数を使うことでオンにできます。 これらは両方、出力バッファを生成できますが、 ob_start の方がより柔軟です。 なぜなら、出力ハンドラをユーザー定義関数として受け入れますし、 (フラッシュ、クリーン、削除 のような) バッファに対する操作もできるからです。 ob_start で開始したバッファは、 それをコールした行からアクティブになりますが、 output_buffering を使って開始したバッファは、スクリプトの最初の行から、出力をバッファします。
PHP は組み込みの
バンドルされている
バッファの内容をフラッシュ/アクセス/削除するフラッシュは、アクティブなバッファの内容を送信し、破棄します。 出力バッファは、出力のサイズがバッファのサイズを超えたときか、 スクリプトが終了するか、 ob_flush, ob_end_flush, ob_get_flush のいずれかがコールされたときにフラッシュされます。 警告
ob_end_flush や ob_get_flush をコールすると、アクティブなバッファがオフになります。 警告
バッファをフラッシュすると、 出力バッファの戻り値がフラッシュされますが、 この値はバッファの内容と異なる場合があります。 例えば、ob_gzhandler を使うと、出力が圧縮され、圧縮された出力がフラッシュされます。 アクティブなバッファの内容は ob_get_contents, ob_get_clean, ob_get_flush をコールすると取得できます。 バッファの中身の長さだけが必要な場合、 ob_get_length や ob_get_status を使えばバッファの中身の長さをバイト単位で取得できます。 警告
ob_get_clean や ob_get_flush をコールすると、アクティブなバッファの中身を返した後、 そのバッファをオフにします。 アクティブなバッファの中身は、 ob_clean, ob_end_clean, ob_get_clean を使って削除できます。 警告
ob_end_clean や ob_get_clean を使うと、アクティブなバッファがオフになります。 出力バッファをオフにするob_end_clean, ob_end_flush, ob_get_flush, ob_get_clean をコールすると、出力バッファをオフにできます。 警告
スクリプトの終了時、または exit がコールされるまでに閉じられていないすべての出力バッファは、 PHP のシャットダウン処理によってフラッシュされ、オフになります。 バッファは、起動した順序と逆の順序でフラッシュされ、オフになります。 最後にバッファリングが開始されたものが最初になり、 最初にバッファリングが開始されたものが最後にフラッシュされ、オフになります。 警告
バッファの内容をフラッシュしたくない場合は、 カスタムの出力ハンドラを使い、シャットダウン中のフラッシュを防ぐべきです。 出力ハンドラでスローされる例外
捕捉されない例外が出力ハンドラでスローされた場合、
プログラムは終了し、 ob_flush, ob_end_flush, ob_get_flush が呼び出したハンドラが、捕捉されない例外をスローした場合、 エラーメッセージがフラッシュされる前にバッファの内容がフラッシュされます。 シャットダウン処理中に出力ハンドラが捕捉されない例外をスローした場合、 ハンドラは終了し、バッファの内容もエラーメッセージもフラッシュされません。
出力ハンドラで発生したエラー出力ハンドラで致命的でないエラーが発生した場合、 プログラムの実行は継続されます。
ob_flush, ob_end_flush,
ob_get_flush
が呼び出したハンドラで致命的でないエラーが発生した場合、
ハンドラの戻り値に応じて、バッファは一定のデータをフラッシュします。
ハンドラが
出力ハンドラ中で致命的なエラーが発生した場合、 プログラムは終了し、 エラーメッセージがフラッシュされた後に、 シャットダウン処理によってハンドラが呼び出されます。 ob_flush, ob_end_flush, ob_get_flush が呼び出したハンドラで、致命的なエラーが発生した場合、 エラーメッセージがフラッシュされる前にバッファの内容がフラッシュされます。 シャットダウン処理中に出力ハンドラで致命的なエラーが発生した場合、 プログラムは終了し、バッファの内容もエラーメッセージもフラッシュされません。 出力ハンドラで行われた出力特定の状況下では、 ハンドラ内で生成された出力はバッファの内容と共にフラッシュされます。 この出力はバッファに追加されず、 ob_get_flush が返す文字列の一部にもなりません。
フラッシュの操作中
(ob_flush,
ob_end_flush, ob_get_flush
のコール中、またはシャットダウン処理中)に、
ハンドラが
出力ハンドラのステータスフラグ
バッファが持つ
|