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

# stream_filter_append

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

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

### 説明

function stream_filter_append(
resource `$stream`,
string `$filter_name`,
int `$mode` = ?,
mixed `$params` = ?
): resource

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

### パラメータ

`stream`

  対象となるストリーム。

`filter_name`

  フィルタ名。

`mode`

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

`params`

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

### 戻り値

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

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

### 例

例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

     */
    ?>

### 注意

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

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

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

### 参考

- stream_filter_register() - ユーザー定義のストリームフィルタを登録する
- stream_filter_prepend() - フィルタをストリームに付加する
- stream_get_filters() - 登録されているフィルタのリストを取得する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open