Предупреждение об устаревании `$ HTTP_RAW_POST_DATA`

Я перешел на PHP 5.6.0 и теперь везде получаю следующее предупреждение:

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will
be removed in a future version. To avoid this warning set
'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream
instead. in Unknown on line 0

Warning: Cannot modify header information - headers already sent in Unknown on line 0

Хорошо, я полагаюсь на некоторые устаревшие функции. Кроме этого Я не!

  1. Я никогда не использовал эту переменную ни в одном из моих сценариев. Если честно, я понятия не имел, что он вообще существует.
  2. phpinfo() показывает, что у меня есть always_populate_raw_post_data установить на 0 (отключено). Так, что происходит?

Я не хочу «избегать предупреждения», устанавливая это значение в -1. Это просто скроет предупреждение, и я все равно буду использовать устаревшую конфигурацию. Я хочу решить проблему в ее источнике и знать, почему PHP так считает HTTP_RAW_POST_DATA заселение включено.

110

Решение

Оказывается, мое понимание сообщения об ошибке было неверным. Я бы сказал, что в нем очень плохой выбор слов. Погуглив вокруг, показал мне, что кто-то другой неправильно понял сообщение точно так же, как я — видите Ошибка PHP # 66763.

После совершенно бесполезного: «Это именно то, чего хотели РМ». В ответ на эту ошибку Майка Тираэль объясняет, что установка его на «-1» не просто предупреждает об уходе. Это делает правильная вещь, то есть он полностью отключает заполнение переменной виновника. Оказывается, что это имеет значение 0 ЕЩЕ заполняет данные при некоторых обстоятельствах. Разговор о плохом дизайне! Цитировать PHP RFC:

Измените параметр INI always_populate_raw_post_data, чтобы принимать три значения вместо двух.

  • -1: поведение мастера; никогда не заполняйте $ GLOBALS [HTTP_RAW_POST_DATA]
  • 0 / выкл. / Что угодно: поведение BC (заполняется, если тип содержимого не зарегистрирован или метод запроса отличается от POST)
  • 1 / on / yes / true: поведение BC (всегда заполняйте $ GLOBALS [HTTP_RAW_POST_DATA])

Так что да, установка его в -1 не только избегает предупреждения, как сказано в сообщении, но также наконец отключает заполнить эту переменную, что я и хотел.

123

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

Я столкнулся с той же проблемой на сервере nginx (DigitalOcean) — все, что мне нужно было сделать, это войти в систему как root и измените файл /etc/php5/fpm/php.ini,

Чтобы найти строку с always_populate_raw_post_data Я первый раз запускаю grep:

grep -n 'always_populate_raw_post_data' php.ini

Это вернуло строку 704

704:;always_populate_raw_post_data = -1

Тогда просто открой php.ini на этой линии с vi редактор:

vi +704 php.ini

Удалите точку с запятой, чтобы раскомментировать ее и сохранить файл :wq

Наконец перезагрузите сервер, и ошибка исчезла.

30

Прошло некоторое время, пока я не наткнулся на эту ошибку. Поднимите мой ответ для тех, кто может наткнуться на этот вопрос.

Ошибка только означает, что вы отправляете пустой запрос POST. Эта ошибка обычно встречается в HTTPRequests без параметров. Чтобы избежать этой ошибки, вы всегда можете добавить параметр в POST без изменения php.ini.

Подобно:

$.post(URL_HERE
,{addedvar : 'anycontent'}
,function(d){
doAnyHere(d);
}
,'json' //or 'html','text'
);
29

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

Вы должны добавить или раскомментировать свойство always_populate_raw_post_data в php.ini и установите его значение -1, В моем случае php.ini находится в:

C:\wamp64\bin\php\php5.6.25\php.ini

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

Вы также должны установить always_populate_raw_post_data = -1 в phpForApache.ini:

C:\wamp64\bin\php\php5.6.25\phpForApache.ini

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

http://localhost/?phpinfo=1

и искать значение Загруженный файл конфигурации ключ. В моем случае php.ini Используется WAMP находится в:

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

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

11

Раскомментировать

always_populate_raw_post_data = -1

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

; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is
; to disable this feature and it will be removed in a future version.
; If post reading is disabled through enable_post_data_reading,
; $HTTP_RAW_POST_DATA is *NOT* populated.
; http://php.net/always-populate-raw-post-data
; always_populate_raw_post_data = -1
5

Если .htaccess файл недоступен, создайте его в корневой папке и пропустите эту строку кода.

Поместите это в .htaccess файл (проверено работает хорошо для API)

<IfModule mod_php5.c>
php_value always_populate_raw_post_data -1
</IfModule>
5

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

var xhr = $.ajax({
url:  url,
type: "GET",
dataType: "html",
timeout: 500,
});

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

var xhr = $.ajax({
url:  url,
type: "POST",
data: {name:'emtpy_petition_data', value: 'empty'}
dataType: "html",
timeout: 500,
});
4

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

2
По вопросам рекламы [email protected]