php post raw data

PHP: Receive raw POST data.

This is a short guide on how to receive raw POST data in PHP. This is useful if you intend on receiving JSON or XML via a POST request.

In most day-to-day cases, we tend to access POST data like so:

However, in certain cases, you may need to access the POST request’s body as a whole. In those cases, you will need to access the php://input stream.

The php://input stream.

PHP has a number of I/O streams that you can access. In this case, we are particularly interested in the php://input stream.

Take a look at the following example:

In the code above, we used the file_get_contents function to read the php://input stream into a PHP variable called $postBody.

If a POST request is sent to the script above, the entire body of the request will be assigned to the $postBody variable.

For example: When I sent three POST parameters to the script in question, the php://input stream returned the following string:

Note that if no POST data is present, the code above will return a blank string.

$HTTP_RAW_POST_DATA is a predefined PHP variable that can be configured to contain raw POST data. However, the variable was officially deprecated in PHP 5.6 and completely removed as of PHP 7.0.

Besides the fact that it is no longer supported, there is also the drawback of having to mess around with .ini directives in order to get it working. This is because the feature is turned off by default on most PHP installations.

The feature relies on the always_populate_raw_post_data directive being set to 1. However, the default value for this directive is 0 (off).

Long story short: You should use the input stream approach instead.

Источник

Я ищу точное определение этого, но все еще не могу найти определение удовлетворения.
Я использовал nusoap webservice, есть строка

Решение

HTTP-запрос состоит из двух частей. Набор заголовков и тела.

Заголовки включают в себя такие вещи, как запрашиваемый URL-адрес и кэширующие помощники управления (например, «У меня есть версия со вчерашнего дня, дайте мне новую, только если есть изменения, хорошо?»).

Тело может появиться или не появиться в зависимости от типа запроса. У запросов POST есть тела.

Тело может быть в любом формате, который нравится клиенту. Один из заголовков сообщит серверу, что это за формат.

Если данные представлены в другом формате, например, JSON, или если данные не соответствуют особенностям PHP (например, правила наличия [] на конце ключей с тем же именем), возможно, вы захотите получить доступ к данным непосредственно, так что вы можете разобрать его самостоятельно. Это необработанные данные POST.

$_POST содержит URL-кодированные (application / www-url-кодированные) переменные, которые публикуются в вашем скрипте, а PHP декодирует их для вас. Вы используете его, когда имеете дело с данными HTML FORM.

$HTTP_RAW_POST_DATA — в теории это то же самое, что и выше, но зависит от php.ini. и больше не доступен в PHP 7

Другие решения

HTTP-сообщение состоит из серии заголовков и тела (которое может быть обязательным / необязательным / запрещенным в зависимости от заголовков).

Если вы сделаете запрос GET для него, то тело запроса не будет.

Если вы сделаете запрос POST, то будет. Если вы отправите форму, она будет закодирована с использованием одного из форматов, которые вы можете указать с помощью enctype приписывать.

Сырое тело это тело до это было расшифровано.

Источник

Warning about `$HTTP_RAW_POST_DATA` being deprecated

I switched to PHP 5.6.0 and now I get the following warning everywhere:

Fine, I rely on some deprecated feature. Except that I don’t!

13 Answers 13

After totally unhelpful «This is the way the RMs wanted it to be.» response to that bug by Mike, Tyrael explains that setting it to «-1» doesn’t make just the warning to go away. It does the right thing, i.e. it completely disables populating the culprit variable. Turns out that having it set to 0 STILL populates data under some circumstances. Talk about bad design! To cite PHP RFC:

Change always_populate_raw_post_data INI setting to accept three values instead of two.

Been awhile until I came across this error. Put up my answer for anyone who may stumble upon this issue.

The error only means that you are sending an empty POST request. This error is commonly found on HTTPRequests with no parameters passed. To avoid this error, you can always add a parameter to the POST without changing the php.ini.

To find the line with the always_populate_raw_post_data I first run grep :

That returned the line 704

Then simply open php.ini on that line with vi editor:

Remove the semi colon to uncomment it and save the file :wq

Lastly reboot the server and the error went away.

If you are using WAMP.

..but if you are still getting the warning (as I was)

If you can’t find this file, open a browser window and go to:

and look for the value of Loaded Configuration File key. In my case the php.ini used by WAMP is located in:

C:\wamp64\bin\apache\apache2.4.23\bin\php.ini (symlink to C:\wamp64\bin\php\php5.6.25\phpForApache.ini)

Finally restart WAMP (or click restart all services)

php post raw data. Смотреть фото php post raw data. Смотреть картинку php post raw data. Картинка про php post raw data. Фото php post raw data

php post raw data. Смотреть фото php post raw data. Смотреть картинку php post raw data. Картинка про php post raw data. Фото php post raw data

in php.ini ( line# 703 ) and restarting APACHE services help me get rid from the message anyway

php post raw data. Смотреть фото php post raw data. Смотреть картинку php post raw data. Картинка про php post raw data. Фото php post raw data

Still an other option if you want to keep the method POST for any reason is to add an empty JSON object to the ajax petititon.

php post raw data. Смотреть фото php post raw data. Смотреть картинку php post raw data. Картинка про php post raw data. Фото php post raw data

I got this error message when sending data from a html form (Post method). All I had to do was change the encoding in the form from «text/plain» to «application/x-www-form-urlencoded» or «multipart/form-data». The error message was very misleading.

php post raw data. Смотреть фото php post raw data. Смотреть картинку php post raw data. Картинка про php post raw data. Фото php post raw data

Unfortunately, this answer here by @EatOng is not correct. After reading his answer I added a dummy variable to every AJAX request I was firing (even if some of them already had some fields) just to be sure the error never appears.

As the answer by @rr- cites,

0/off/whatever: BC behavior (populate if content-type is not registered or request method is other than POST).

Because the request method is for sure POST, I guess PHP didn’t recognize/like my Content-Type: application/json request (again, why??).

OPTION 1:

OPTION 2:

This is a PHP 5.6 bug. Upgrade PHP.

OPTION 3:

OPTION 4: LAST RESORT

Well, I did not want to change the Content-Type of AJAX, it would cause a lot of trouble for debugging. (Chrome DevTools nicely views the POSTed variables of JSON requests.)

Источник

PHP: Receive raw POST data.

This is a short guide on how to receive raw POST data in PHP.

The php://input stream.

PHP has a number of I/O streams that you can access. In this case, we are particularly interested in the php://input stream.

Take a look at the following example:

//Get the raw POST data$postBody = file_get_contents(“php://input”);

In the code above, we used the file_get_contents function to read the php://input stream into a PHP variable called $postBody.

If a POST request is sent to the script above, the entire body of the request will be assigned to the $postBody variable.

For example: When I sent three POST parameters to the script in question, the php://input stream returned the following string:

Note that if no POST data is present, the code above will return a blank string.

4 ответов

мы можем разделить формы представления в трех случаях:

$_POST = array( “key1” => “value1”, “key2” => “value2”, “key3” => array(“value3.1”, “value3.2”);)

$HTTP_RAW_POST_DATA будет содержать что-то вроде:

используя JavaScript, который может быть встроен в HTML, вы можете опубликовать все, что вам нравится с AJAX. Что-то вроде этого:–6–>

var req = new XMLHttpRequest();req.open(‘POST’, ‘http://www.example.com/my_url’ true);req.send(‘any data you want’);

позволит вам размещать произвольные вещи на веб-сервере.

_POST принимает application/x-www-form-urlencoded или multipart/form-data ценностей форма. HTTP_RAW_POST_DATA, если заполнен, – это “сырые” строки. Вы также можете получить доступ к этому с помощью psuedo-url php://input. Вы можете отправлять произвольные данные POST (например, XML, JSON, HTML) с помощью AJAX.

автор: Matthew Flaschen

Решение

HTTP-запрос состоит из двух частей. Набор заголовков и тела.

Заголовки включают в себя такие вещи, как запрашиваемый URL-адрес и кэширующие помощники управления (например, «У меня есть версия со вчерашнего дня, дайте мне новую, только если есть изменения, хорошо?»).

Тело может появиться или не появиться в зависимости от типа запроса. У запросов POST есть тела.

Тело может быть в любом формате, который нравится клиенту. Один из заголовков сообщит серверу, что это за формат.

Если данные представлены в другом формате, например, JSON, или если данные не соответствуют особенностям PHP (например, правила наличия [] на конце ключей с тем же именем), возможно, вы захотите получить доступ к данным непосредственно, так что вы можете разобрать его самостоятельно. Это необработанные данные POST.

$_POST содержит URL-кодированные (application / www-url-кодированные) переменные, которые публикуются в вашем скрипте, а PHP декодирует их для вас. Вы используете его, когда имеете дело с данными HTML FORM.

$HTTP_RAW_POST_DATA — в теории это то же самое, что и выше, но зависит от php.ini. и больше не доступен в PHP 7

Если вы используете WAMP

..но если вы все еще получаете предупреждение (как и я)

Если вы не можете найти этот файл, откройте окно браузера и перейдите по ссылке:

C:wamp64binapacheapache2.4.23binphp.ini (символическая ссылка на C: wamp64 bin php php5.6.25 phpForApache.ini)

Наконец, перезапустите WAMP (или нажмите перезапустить все службы)

в php.ini (строка # 703) и перезапуск служб APACHE в любом случае поможет мне избавиться от сообщения

Для тех, кто все еще борется с этой проблемой после изменения php.init, как предполагает принятый ответ. Поскольку ошибка возникает, когда петиция ajax POSTотправляется без каких-либо параметров, все, что вам нужно сделать, это изменить метод отправки на GET.

Еще один вариант, если вы хотите сохранить метод POSTпо какой-либо причине, – это добавить пустой объект JSON в петититон ajax.

Я получил это сообщение об ошибке при отправке данных из html-формы (метод Post). Все, что мне нужно было сделать, это изменить кодировку в форме с «text / plain» на «application / x-www-form-urlencoded» или «multipart / form-data». Сообщение об ошибке вводило в заблуждение.

Но только сейчас наткнулся на ту же чертову ошибку PHP. Я дважды подтвердил, что отправил некоторые данные POST (также некоторые другие поля вместе с фиктивной переменной). Версия PHP 5.6.25, always_populate_raw_post_dataустановлено значение 0.

Как ответил @ rr-cites,

0 / выкл / что угодно: поведение BC (заполняется, если тип содержимого не зарегистрирован или метод запроса отличается от POST ).

ОПЦИЯ 1:

ВАРИАНТ 2:

Это ошибка PHP 5.6. Обновите PHP.

ВАРИАНТ 3:

ВАРИАНТ 4: ПОСЛЕДНИЙ КУРОРТ

Что ж, я не хотел менять Content-TypeAJAX, это вызвало бы много проблем при отладке. (Chrome DevTools прекрасно просматривает переменные POSTed запросов JSON.)

Я разрабатываю эту вещь для клиента и не могу попросить его использовать последнюю версию PHP или редактировать файл php.ini. В крайнем случае, я просто проверю, установлен ли он, 0и если да, то отредактирую php.iniфайл в самом моем PHP-скрипте. Конечно, мне придется попросить пользователя перезапустить apache. Какая жалость!

Что ж, если есть кто-то на общем хостинге и без доступа к php.iniфайлу, вы можете установить эту строку кода в самом верху ваших файлов PHP:

Работает примерно так же. Надеюсь, это сэкономит кому-то время на отладку 🙂

NB: ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ PHPSTORMphp post raw data. Смотреть фото php post raw data. Смотреть картинку php post raw data. Картинка про php post raw data. Фото php post raw data

Я потратил час, пытаясь решить эту проблему, думая, что это проблема моего php-сервера, поэтому я установил ‘always_populate_raw_post_data’ в ‘-1’ в php.ini, и ничего не сработало.

Я только что получил от друга решение этой проблемы. он сказал: добавьте ob_start (); под кодом вашей сессии. Вы можете добавить exit (); под шапкой. Я попробовал, и это сработало. Надеюсь это поможет

Источник

My question was inspired from this answer: How to post JSON to PHP with curl

Quote from that answer:

From a protocol perspective file_get_contents(«php://input») is actually more correct, since you’re not really processing http multipart form data anyway.

php post raw data. Смотреть фото php post raw data. Смотреть картинку php post raw data. Картинка про php post raw data. Фото php post raw data

6 Answers 6

Actually php://input allows you to read raw POST data.

php post raw data. Смотреть фото php post raw data. Смотреть картинку php post raw data. Картинка про php post raw data. Фото php post raw data

send by post JSON string

1.php

The usual rules should apply for how you send the request. If the request is to retrieve information (e.g. a partial search ‘hint’ result, or a new page to be displayed, etc. ) you can use GET. If the data being sent is part of a request to change something (update a database, delete a record, etc..) then use POST.

Server-side, there’s no reason to use the raw input, unless you want to grab the entire post/get data block in a single go. You can retrieve the specific information you want via the _GET/_POST arrays as usual. AJAX libraries such as MooTools/jQuery will handle the hard part of doing the actual AJAX calls and encoding form data into appropriate formats for you.

For JSON data, it’s much easier to POST it as «application/json» content-type. If you use GET, you have to URL-encode the JSON in a parameter and it’s kind of messy. Also, there is no size limit when you do POST. GET’s size if very limited (4K at most).

Your second question is easy, GET has a size limitation of 1-2 kilobytes on both the server and browser side, so any kind of larger amounts of data you’d have to send through POST.

Источник

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

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