stream_filter_append

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

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

Описание

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

Функция добавляет фильтр 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

*/

?>

Примечания

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

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

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

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