(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
stream_filter_append — ストリームにフィルタを付加する
$stream
,$filtername
,$read_write
= ?,$params
= ?
filtername
で指定されたフィルタを、
stream
に付加されているフィルタのリストに加えます。
stream
対象となるストリーム。
filtername
フィルタ名。
read_write
デフォルトでは、 stream_filter_append() は
ストリームが読み込み用に開かれている場合は (つまり、オープンモードが
r
あるいは +
を伴う場合は)、
フィルタを リードフィルタチェイン
に追加し、
ストリームが書き出し用に開かれている場合は(つまり、オープンモードが
w
か a
か、あるいは+
を伴う場合は)、
ライトフィルターチェィン
にも追加します。
STREAM_FILTER_READ
・
STREAM_FILTER_WRITE
・
STREAM_FILTER_ALL
を read_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_READ
とSTREAM_FILTER_WRITE
で stream_filter_append() を 2 回コールしなければなりません。