(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
*/
?>Замечание: Передача пользовательских фильтров
Сначала требуется вызвать функцию stream_filter_register(), чтобы зарегистрировать необходимый пользовательский фильтр для параметраfiltername.
Замечание: Потоковые данные читаются из ресурсов (как локальных, так удалённых) порциями, при этом невостребованные данные сохраняются во внутренних буферах. Когда новый фильтр добавляется в конец потока, данные во внутренних буферах обрабатываются через новый фильтр. Это отличается от поведения функции stream_filter_prepend().
Замечание: Когда фильтр добавляется для чтения и записи, создаются два экземпляра фильтра. Функцию stream_filter_append() необходимо вызвать дважды с флагами
STREAM_FILTER_READиSTREAM_FILTER_WRITE, чтобы получить оба ресурса фильтра.