Прикрепляет фильтр к потоку

# 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

     */

    ?>

### Примечания

> Замечание: Передача пользовательских фильтров
> Сначала требуется вызвать функцию stream_filter_register(), чтобы зарегистрировать необходимый пользовательский фильтр для параметра `filter_name`.

> Замечание: Потоковые данные читаются из ресурсов (как локальных, так удалённых) порциями, при этом невостребованные данные сохраняются во внутренних буферах. Когда новый фильтр добавляется в конец потока, данные во внутренних буферах обрабатываются через новый фильтр. Это отличается от поведения функции stream_filter_prepend().

> Замечание: Когда фильтр добавляется для чтения и записи, создаются два экземпляра фильтра. Функцию stream_filter_append() необходимо вызвать дважды с флагами `STREAM_FILTER_READ` и `STREAM_FILTER_WRITE`, чтобы получить оба ресурса фильтра.

### Смотрите также

- stream_filter_register() - Регистрирует пользовательский фильтр потока
- stream_filter_prepend() - Прикрепляет фильтр к потоку
- stream_get_filters() - Получает список зарегистрированных фильтров

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