Что такое HTTP_RAW_POST_DATA?

August 20, 2014

Возник вопрос: что такое HTTP_RAW_POST_DATA?

Разберемся:

1) Что это такое?
$HTTP_RAW_POST_DATA содержит необработанные (сырые) POST-данные. т.е. если мы передаем через POST следующий массив данных:

(
[name] => John
[time] => 2pm
)


то в $HTTP_RAW_POST_DATA будет следующая строка:

name=John&time=2pm


2) Как можно достучаться еще к данной переменной?
Три равнознычных способа:

  • $HTTP_RAW_POST_DATA
  • $GLOBALS['HTTP_RAW_POST_DATA']
  • file_get_contents(‘php://input’)


3) Переменная $HTTP_RAW_POST_DATA недоступна. Что делать?

  • в php.ini включить always_populate_raw_post_data = On , что позволит всегда заполнять переменную $HTTP_RAW_POST_DATA
  • обратиться к данным через file_get_contents(‘php://input’) . Данный способ не зависит от директив в php.ini.
  • использовать какой-нибудь неопознанный MIME тип данных (например: $HTTP_RAW_POST_DATA не формируется при типах: multipart/form-data и application/x-www-form-urlencoded и работает при типе application/octet-stream)


4) Почему массив $_POST пустой, хотя данные точно передаются ?

Т.к. эти данные не получилось обработать и они просто находятся в $HTTP_RAW_POST_DATA

5) Что такое: 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”.

Комментарии

comments powered by Disqus