Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

Php://input

#php


Привет встретил код 
$body = file_get_contents('php://input');

Этот метод нужен чтобы получить содержимое POST и GET запросов?Чем уже $_POST и $_GEt
не устроил?
Зачем вообще нужен этот ужас?
Читая статью трудно въехать для чего нужны эти самые потоки...Ни примеров ни толквого
изложения....
http://www.php.net/manual/ru/wrappers.php.php    


Ответы

Ответ 1



чем вас мануал не устраивает? оригинал: php://input is a read-only stream перевод: php://input является потоком только для чтения оригинал: php://input instead of $HTTP_RAW_POST_DATA as it does not depend on special php.ini directives. Moreover, for those cases where $HTTP_RAW_POST_DATA is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data. перевод: В случае POST-запросов предпочтительней использовать php://input вместо $HTTP_RAW_POST_DATA, так как этот метод не зависит от специальных php.ini директив. Кроме того, в тех случаях, где $HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее затратно для памяти, чем активация директивы always_populate_raw_post_data. оригинал: php://input is not available with enctype="multipart/form-data" перевод: php://input не доступен с типом содержимого enctype="multipart/form-data" читать надо внимательней

Ответ 2



К примеру вам нужно отправить json сериализованную строку. Передавать это нужно через POST, потому что в GET длина этой самой строки ограничена, кажется, 4мя килобайтами. Что же именно передается POST методом ? А передается вот что: POST /test/script.php HTTP/1.1 Host: site.com Content-Length: xxxx ... и другие заголовки.. paramName1=paramValue1¶mName2=paramValue2... Передавать что-то типа: abc= не хочется, потому что нужно экранировать еще эту строку. Поэтому мы просто скармливаем строку скрипту. На сервер прийдет что-то типа такого: POST /test/script.php HTTP/1.1 Host: site.com Content-Length: xxxx ... и другие заголовки.. {"paramName1": "paramValue2","paramName2": "paramValue2",...} Естественно, сервер не умеет парсить такие запросы, поэтому нам на помощь приходит file_get_contents('php://input'); Мы можем получить то, что нам прислали, без изменений, самим распарсить это и быть счастливым :)

Ответ 3



Список методов не ограничивается GET и POST. Например в REST спецификации используются еще PUT, DELETE и еще какие-то. Обрабатываются они соответственно через php://input. А смысл то простой, мы получаем таким образом сырой запрос, очень полезная штука.

Комментариев нет:

Отправить комментарий