OutputBufferStackプラグイン
概要
出力バッファリングを有効にし、ob_start()を使って、それぞれの出力フィルタ?を、PHPの出力ハンドラとして登録する出力フィルタ?。
説明
void invoke (void)
出力フィルタ?は、Rootプラグイン?の拡張ポイントoutputFilter?として定義されており、OutputBufferStackプラグインがその役割を担っています。OutputBufferStackという名前から想像できるように、このプラグインの唯一の拡張ポイントfiltersはスタックのように働きます。1
このプラグインは、拡張ポイントfiltersに設定されたすべてのフィルタを、登録順に出力バッファリング機構に登録します。登録されたフィルタは、PHPの出力バッファリング機構によって、リクエストの最後にブラウザに出力をフラッシュする際に、登録順の逆に実行されます。
このプラグインのプロセスフローは下記のようになります。
- 拡張ポイントfiltersが配列かどうか確認する。filtersが配列でなければ処理を終了し、呼び出し元に戻る
- ob_end_clean()によって、すべての出力ハンドラをクリアする
- 拡張ポイントfiltersの要素を、ob_start()を使って、出力ハンドラとして登録する
- 1. この動作はPHPの出力バッファリング機構のものです。
拡張ポイント
filters
デフォルト値
array()
概要
出力フィルタ?の配列。
説明
出力フィルタ?には、後述のインタフェースを持つプラグイン、または単なる関数が登録できます。出力フィルタ?は、配列の要素順に出力バッファリング機構に登録され、逆順に実行されます。
出力フィルタのインタフェース
string foo (string $buffer)
それぞれの出力フィルタ?は、文字列を受け取って文字列を返すようなインタフェースを備えている必要があります。
設定例
- name: OutputBufferStack
point:
- name: filters
type: extension
value:
- OutputFilter_ContentLength
- mb_output_handler()
- OutputFilter_JapaneseZ2H
この設定例は次のように動作します。
- OutputFilter_JapaneseZ2Hプラグインによって、全角カナが半角カナに変換される
- mb_output_handler()によって、出力バッファの文字が、内部文字エンコーディングからHTTP出力文字エンコーディングに変換される
- OutputFilter_ContentLengthプラグインによって、適切なContent-Lengthヘッダが出力される
設定ポイント
設定ポイントはありません。
ソースコード
Piece/Unity/Plugin/OutputBufferStack.php
ユーザコメント
