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://inputphp://stdinphp://memoryиphp://temp |
| Читання | тільки php://stdinphp://inputphp://fdphp://memoryиphp://temp |
| Запис | тільки php://stdoutphp://stderrphp://outputphp://fdphp://memoryиphp://temp |
| Додавання | тільки php://stdoutphp://stderrphp://outputphp://fdphp://memoryиphp://temp. . (еквівалентно запису) |
| Одночасне читання та запис | тільки php://fdphp://memoryиphp://temp |
| Поддержкаstat() | ні. Проте, php://memoryиphp://temp підтримують fstat() |
| Поддержкаunlink() | Ні |
| Поддержкаrename() | Ні |
| Поддержкаmkdir() | Ні |
| Поддержкаrmdir() | Ні |
| Поддержкаstream_select() | тільки php://stdinphp://stdoutphp://stderrphp://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...