Php input что это
Перейти к содержимому

Php input что это

Php input что это

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 недоступен с типом содержимого enctype="multipart/form-data" .

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://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 начнёт использовать временный файл.

<?php
// Установка предела в 5 MB.
$fiveMBs = 5 * 1024 * 1024 ;
$fp = fopen ( «php://temp/maxmemory: $fiveMBs » , ‘r+’ );

fputs ( $fp , «hello\n» );

// Читаем то, что мы записали.
rewind ( $fp );
echo stream_get_contents ( $fp );
?>

Пример #2 php://filter/resource=<поток для фильтрации>

Этот параметр должен быть расположен в конце вашей спецификации php://filter и должен указывать на поток, который вы хотите фильтровать.

<?php
/* Это просто эквивалентно:
readfile(«http://www.example.com»);
так как на самом деле фильтры не указаны */

Пример #3 php://filter/read=<список фильтров для применения к цепочке чтения>

Этот параметр принимает один или более имён фильтров, разделённых вертикальной чертой | .

<?php
/* Этот скрипт выведет содержимое
www.example.com полностью в верхнем регистре */
readfile ( «php://filter/read=string.toupper/resource=http://www.example.com» );

/* Этот скрипт делает тоже самое, что вверхний, но
будет также кодировать алгоритмом ROT13 */
readfile ( «php://filter/read=string.toupper|string.rot13/resource=http://www.example.com» );
?>

Пример #4 php://filter/write=<список фильтров для применения к цепочке записи>

Этот параметр принимает один или более имён фильтров, разделённых вертикальной чертой | .

php:// — Доступ к различным потокам ввода-вывода

PHP предоставляет несколько разнообразных потоков ввода-вывода, которые позволяют получить доступ к собственным потокам ввода-вывода PHP,к дескрипторам стандартного ввода, вывода и потока ошибок, к временным файловым потокам в памяти и на диске, и фильтрам, которые могут манипулировать другими файловыми ресурсами по мере их считывания или записи.

php://stdin, php://stdout и php://stderr

php://stdin , php://stdout и php://stderr позволяют получить прямой доступ к соответствующим потокам ввода или вывода процесса PHP. Поток указывает на копию файлового дескриптора, таким образом, если вы откроете php://stdin и потом закроете его, вы закроете только вашу копию дескриптора. Актуальный поток, на который ссылается STDIN остается неизменным. Обратите внимание, что PHP демонстрировал ошибочное поведение в этом отношении до версии PHP 5.2.1. Рекомендуется просто использовать константы STDIN , STDOUT и STDERR вместо ручного открытия потоков, используя эти обертки.

Поток php://stdin предназначен только для чтения, тогда как php://stdout и php://stderr предназначены только для записи.

php://input

php://input является потоком только для чтения, который позволяет вам читать необработанные данные из тела запроса. В случае POST-запросов предпочтительней использовать php://input вместо $HTTP_RAW_POST_DATA , так как этот метод не зависит от специальных php.ini директив. Кроме того, в тех случаях, где $HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее затратно для памяти, чем активация директивы always_populate_raw_post_data. php://input не доступен с типом содержимого enctype="multipart/form-data".

Замечание: До версии PHP 5.6, поток, открытый с php://input может быть прочтен только один раз. Поток не поддерживает операции поиска. Тем не менее, в зависимости от реализации SAPI интерфейса, может быть возможно открыть другой поток php://input и повторить чтение. Это возможно только если тело запроса заранее сохраняется. Это типично для случая с POST-запросом, но не для других методов запросов, таких как PUT или PROPFIND.

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://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.
Поддержка unlink() Нет
Поддержка rename() Нет
Поддержка mkdir() Нет
Поддержка rmdir() Нет
Поддержка stream_select() только php://stdin, php://stdout, php://stderr, php://fd и php://temp.

Список изменений

Версия Описание
5.6.0 Стало возможным использовать повторно php://input .
5.3.6 Был добавлен php://fd .
5.1.0 Были добавлены php://memory и php://temp .
5.0.0 Был добавлен php://filter .

Примеры

Пример #1 php://temp/maxmemory

Этот необязательный параметр позволяет установить лимит памяти до того, как php://temp начнет использовать временный файл.

<?php
// Установка предела в 5 MB.
$fiveMBs = 5 * 1024 * 1024 ;
$fp = fopen ( «php://temp/maxmemory: $fiveMBs » , ‘r+’ );

fputs ( $fp , «hello\n» );

// Читаем то, что мы записали.
rewind ( $fp );
echo stream_get_contents ( $fp );
?>

Пример #2 php://filter/resource=<поток для фильтрации>

Этот параметр должен быть расположен в конце вашей спецификации php://filter и должен указывать на поток, который вы хотите фильтровать.

<?php
/* Это просто эквивалентно:
readfile(«http://www.example.com»);
так как на самом деле фильтры не указаны */

Пример #3 php://filter/read=<список фильтров для применения к цепочке чтения>

Этот параметр принимает один или более имен фильтров, разделенных вертикальной чертой |.

<?php
/* Этот скрипт выведет содержимое
www.example.com полностью в верхнем регистре */
readfile ( «php://filter/read=string.toupper/resource=http://www.example.com» );

/* Этот скрипт делает тоже самое, что вверхний, но
будет также кодировать алгоритмом ROT13 */
readfile ( «php://filter/read=string.toupper|string.rot13/resource=http://www.example.com» );
?>

Пример #4 php://filter/write=<список фильтров для применения к цепочке записи>

Этот параметр принимает один или более имен фильтров, разделенных вертикальной чертой |.

Php://input

Этот метод нужен чтобы получить содержимое POST и GET запросов?Чем уже $_POST и $_GEt не устроил? Зачем вообще нужен этот ужас?

Читая статью трудно въехать для чего нужны эти самые потоки. Ни примеров ни толквого изложения. http://www.php.net/manual/ru/wrappers.php.php

К примеру вам нужно отправить json сериализованную строку. Передавать это нужно через POST, потому что в GET длина этой самой строки ограничена, кажется, 4мя килобайтами.

Что же именно передается POST методом ?

А передается вот что:

Передавать что-то типа: abc=<json_string> не хочется, потому что нужно экранировать еще эту строку.

Поэтому мы просто скармливаем строку скрипту. На сервер прийдет что-то типа такого:

Естественно, сервер не умеет парсить такие запросы, поэтому нам на помощь приходит file_get_contents(‘php://input’);

Мы можем получить то, что нам прислали, без изменений, самим распарсить это и быть счастливым 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *