Stream_filter_register - реєструє потоковий фільтр, визначений користувачем

stream_filter_register — реєструє потоковий фільтр, визначений користувачем

stream_filter_register()дозволяє вам реалізувати ваш власний фільтр на будь-якому зареєстрованому потоці, який використовується з усіма іншими функціями файлової системи (такими як fopen(), fread() тощо).

Список параметрів

Назва фільтру, що реєструється.

Для того, щоб реалізувати фільтр, вам потрібно визначити клас як розширенняphp_user_filterз функціями-членами, як зазначено нижче. При виконанні операцій читання/запису на потоці, до якого прикріплений ваш фільтр, PHP передаватиме дані через ваш фільтр (і через будь-які інші фільтри, прикріплені до потоку) так що дані можуть бути змінені як потрібно. Ви повинні реалізувати методи точно як описано нижче. Інша реалізація призведе до непередбачуваної поведінки.

intfilter( resource $in , resource $out , int &$consumed , bool $closing )

Цей метод викликається щоразу, коли дані читаються чи записуються в прикріплений потік (такий, як із функціями fread() чи fwrite()). Зміннаin- це ресурс, що вказує на послідовний потік даних (bucket brigade), який містить одну або більше одиниць даних (bucket), що містять дані для фільтрації. Зміннаout- це ресурс, що вказує на другий послідовний потік даних (bucket brigade), який повинен бути поміщені ваші модифіковані одиниці даних (buckets). Зміннаconsumed, яка повинна завжди передаватися за посиланням, має бути збільшена на довжину даних, які ваш фільтр читає та змінює. У більшості випадків це означає, що ви збільшуватиметеconsumedна$bucket->datalenдля кожного$bucket. Якщо потік у процесі закриття (і таким чином це останній прохід по ланцюжку фільтрів), параметрclosingбуде встановлений значенняTRUE. Методfilter()повинен повертати одне з трьох визначених значень після завершення. ЗначенняPSFS_PASS_ONФільтр відпрацював успішно, дані доступні вoutbucket brigade.PSFS_FEED_MEФільтр відпрацював успішно, проте дані не доступні для повернення. Потрібно більше даних із потоку або попереднього фільтра.PSFS_ERR_FATAL(за замовчуванням) Фільтр зазнав невиправної помилки і не може продовжувати.

boolonCreate( void ) Цей метод викликається під час створення об'єкта класу фільтра. Якщо ваш фільтр виділяє або ініціалізує будь-які інші ресурси (такі, як буфер), потрібно робити це тут. Ваша реалізація цього методу повинна повертатиFALSEу разі невдачі абоTRUEу разі успіху. Коли створюється перший екземпляр вашого фільтра і викликається методyourfilter->onCreate(), буде доступно кілька властивостей, показаних у таблиці нижче.

Властивість ВмістFilterClass-filternameРядок, що містить назву фільтра, екземпляр якого був створений. Фільтри можуть бути зареєстровані під різними іменами чи шаблонами. Використовуйте цю властивість для того, щоб визначити, яка назва була використана.FilterClass->paramsВміст параметраparams, переданого функції stream_filter_append() або stream_filter_prepend().FilterClass-streamРесурс потоку, що фільтрується. Може бути доступний лише під час дзвінківfilter(), коли параметрclosingвстановлений у значенняFALSE.

voidonClose( void )

Цей метод викликається під часзавершення фільтра (зазвичай це відбувається під час завершення потоку) і виконується після того, як був викликаний методflush. Якщо будь-які ресурси були виділені або ініціалізовані під час виклику методу onCreate() , то тут слід їх знищити або позбутися їх.

Значення, що повертаються

ПовертаєTRUEу разі успішного завершення абоFALSEу разі виникнення помилки.

stream_filter_register()повертатимеFALSEякщо фільтр з ім'ямfilternameвже визначений.

Приклад #1 Фільтр для перекладу букв у верхній регістр у потоці foo-bar.txt

Приклад нижче реалізує фільтр під назвоюstrtoupperна файловому потоці foo-bar.txt , який буде переводити в великі всі літери, які пишуться/читаються з цього потоку.

Результат виконання цього прикладу:

Приклад #2 Реєстрація стандартного фільтра, що відповідає множинним іменам фільтрів.

Результат виконання цього прикладу:

Дивіться також

  • stream_wrapper_register() - Реєструє обгортку URL, реалізовану у вигляді PHP-класу
  • stream_filter_append() - Прикріплює фільтр до потоку
  • stream_filter_prepend() - Прикріплює фільтр до потоку