stream_filter_append

ストリームにフィルタを付加する

説明

resource stream_filter_append(
    resource $stream,
    string $filtername,
    int $read_write = ?,
    mixed $params = ?
)

filtername で指定されたフィルタを、 stream に付加されているフィルタのリストに加えます。

パラメータ

stream

対象となるストリーム。

filtername

フィルタ名。

read_write

デフォルトでは、 stream_filter_append は ストリームが読み込み用に開かれている場合は (つまり、オープンモードが r あるいは + を伴う場合は)、 フィルタを リードフィルタチェイン に追加し、 ストリームが書き出し用に開かれている場合は(つまり、オープンモードが waか、あるいは+ を伴う場合は)、 ライトフィルターチェィンにも追加します。 STREAM_FILTER_READSTREAM_FILTER_WRITESTREAM_FILTER_ALLread_writeパラメータに渡すことで、この挙動を変えることができます。

params

このフィルタは、指定された params と共に、 リストの末尾に追加され、ストリームに対する操作の中で最後に呼び出されます。 フィルタをリストの先頭に加えたいときは、stream_filter_prepend を使ってください。

戻り値

成功した場合にリソース、失敗した場合に false を返します。 このリソースは、stream_filter_remove をコールする際にこのフィルタインスタンスを参照するために使用可能です。

false が返されるのは、stream がリソースではない場合や filtername が見つからない場合です。

例1 フィルタの適用される場所を制御する

<?php
/* ファイルを読み書き用に開く */
$fp = fopen('test.txt', 'w+');

/* ROT13 フィルタをライトフィルタチェインに付加する。
 * リードフィルタチェインには付加しない。*/
stream_filter_append($fp, "string.rot13", STREAM_FILTER_WRITE);

/* 単純な文字列をファイルに書き出す。
 * この文字列には、出口で ROT13 変換が適用される。
 */
fwrite($fp, "This is a test\n");

/* ファイルの最初に戻る */
rewind($fp);

/* 書き出した内容を読み戻す。
 * もし、フィルタがリードフィルタチェインにも
 * 付加されていれば、再び読み出し時に ROT13 が適用され、
 * テキストは元の状態に戻るはず。 */
fpassthru($fp);

fclose($fp);

/* 期待される出力
   ---------------

Guvf vf n grfg

 */
?>

注意

注意: カスタム(ユーザー)フィルタを使うには
カスタムフィルタを filtername に指定するためには、 まず stream_filter_register 関数でそれを登録しておく 必要があります。

注意: ストリームデータは(ローカルおよびリモートの)リソースからチャンク単位で 読み込まれ、内部バッファに保持されます。新しいフィルタがストリームに 追加されると、内部バッファのデータがその時点でフィルタリングされます。 これは stream_filter_prepend の挙動とは違います。

注意: フィルタが読み込み用および書き込み用に追加されると、フィルタのインスタンスが 2 つ作成されます。両方のフィルタリソースを取得するには、 STREAM_FILTER_READSTREAM_FILTER_WRITEstream_filter_append を 2 回コールしなければなりません。

参考

  • stream_filter_register
  • stream_filter_prepend
  • stream_get_filters