php://
php:// — Доступ до різних потоків введення-виводу
Опис
PHP надає кілька різноманітних потоків введення-виводу, які дозволяють отримати доступ до власних потоків введення-виводу PHP, до дескрипторів стандартного введення, виведення та потоку помилок, до тимчасових файлових потоків у пам'яті та на диску, та фільтрів, які можуть маніпулювати іншими файловими ресурсами у міру їхнього зчитування або запису.
php://stdin, php://stdout та php://stderr
php://stdin, php://stdout та php://stderr дозволяють отримати прямий доступ до відповідних потоків введення або виведення процесу PHP. Потік вказує на копію файлового дескриптора, так що якщо ви відкриєте php://stdin і потім закриєте його, ви закриєте тільки вашу копію дескриптора. Актуальний потік, на який посилається STDIN
, залишається незмінним. Рекомендується просто використовувати константи STDIN
STDOUT
і STDERR
замість ручного відкриття потоків, використовуючи ці обгортки.
Потік php://stdin призначений лише читання, тоді як php://stdout і php://stderr призначені лише запису.
php://input
php://input є потоком тільки для читання, який дозволяє читати необроблені дані з тіла запиту. php://input недоступний у POST-запитах з enctype="multipart/form-data"
якщо опція enable_post_data_readingвключена.
php://output
php://output є потоком тільки для запису, який дозволяє вам записати дані у вихідний буфер аналогічно, як це роблять функції print і echo
php://fd
php://fd надає прямий доступ до вказаного файлового дескриптора. Наприклад, php://fd/3 відноситься до файлового дескриптора 3.
php://memory та php://temp
php://memory та php://temp є потоками для читання/запису і дозволяють зберігати тимчасові дані у файлоподібній обгортці. Єдина різниця між ними полягає в тому, що php://memory завжди зберігатиме дані в оперативній пам'яті, тоді як php://temp буде використовувати тимчасовий файл у тому випадку, коли обсяг інформації, що зберігається, досягне заданого ліміту (за замовчуванням 2 Мб) . Розташування цього тимчасового файлу визначається аналогічно функції sys_get_temp_dir()
Розмір ліміту для php://temp може встановлюватися шляхом додавання /maxmemory:NN
, гдеNN
— це максимальний розмір даних у байтах для зберігання пам'яті перед використанням тимчасового файла.
Застереження
Модулям PHP може знадобитися стандартний потік введення-виводу і вони можуть спробувати перетворити заданий потік на стандартний потік введення-виведення. Це перетворення може завершитися помилкою для потоків пам'яті, оскільки для такого приведення потрібна функція fopencookie() мови Сі. Така функція мови Сі недоступна у операційних системах Windows.
php://filter
php://filter - це вид мета-обгортки, призначений для вирішення застосування фільтрів до потоку під час відкриття. Це корисно для функціонально повних файлових функцій, таких як readfile() file() і file_get_contents()де немає можливості застосувати фільтр до потоку до того, як вміст буде прочитаний.
Потік php://filter приймає такі параметри як частину свого шляху. В одному шляху можна вказати кілька ланцюжків фільтрів. Будь ласка, ознайомтеся з прикладами та особливостями використання цих параметрів.
Параметри для php://filter
Название | Опис |
---|---|
resource=<потік для фільтрації> | Цей параметр є потрібним. Він показує потоку, що його потрібно відфільтрувати. |
read=<список фільтрів для застосування до ланцюжка читання> | Цей параметр є необов'язковим. Одне або кілька імен фільтрів може бути вказано тут, розділених вертикальною межею (` |
write=<список фільтрів для застосування до ланцюжка запису> | Цей параметр є необов'язковим. Одне або кілька імен фільтрів може бути вказано тут, розділених вертикальною межею (` |
<список фільтрів для застосування до обох ланцюжків читання та запису> | Будь-який список фільтрів, які використовуються без префіксів read= илиwrite= , буде застосовано до обох потоків на читання та запис за необхідності. |
Опції
Основна інформація (для php://filter
дивіться інформацію по обгортці, яка піддається фільтрації)
Атрибут | Поддержка |
---|---|
Обмеження по allow_url_fopen | Ні |
Обмеження по allow_url_include | тільки php://input php://stdin php://memory иphp://temp |
Читання | тільки php://stdin php://input php://fd php://memory иphp://temp |
Запис | тільки php://stdout php://stderr php://output php://fd php://memory иphp://temp |
Додавання | тільки php://stdout php://stderr php://output php://fd php://memory иphp://temp . . (еквівалентно запису) |
Одночасне читання та запис | тільки php://fd php://memory иphp://temp |
Поддержкаstat() | ні. Проте, php://memory иphp://temp підтримують fstat() |
Поддержкаunlink() | Ні |
Поддержкаrename() | Ні |
Поддержкаmkdir() | Ні |
Поддержкаrmdir() | Ні |
Поддержкаstream_select() | тільки php://stdin php://stdout php://stderr php://fd иphp://temp |
Приклади
Приклад #1 php://temp/maxmemory
Цей необов'язковий параметр дозволяє встановити ліміт пам'яті, перш ніж php://temp почне використовувати тимчасовий файл.
Loading...
Приклад #2 php://filter/resource=<потік для фільтрації>
Цей параметр повинен бути розташований наприкінці вашої специфікації php://filter і повинен вказувати на потік, який ви хочете фільтрувати.
Loading...
Приклад #3 php://filter/read=<список фільтрів для застосування до ланцюжка читання>
Цей параметр приймає один або більше імен фільтрів, розділених вертикальною рисою
Loading...
Приклад #4 php://filter/write=<список фільтрів для застосування до ланцюжка запису>
Цей параметр приймає один або більше імен фільтрів, розділених вертикальною рисою
Loading...
Приклад #5 php://memory та php://temp не можна перевикористовувати
php://memory та php://temp не можна перевикористовувати, тобто після закриття потоків неможливо послатися на них знову.
Loading...