Я перешел на 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
Хорошо, я полагаюсь на некоторые устаревшие функции. Кроме этого Я не!
phpinfo()
показывает, что у меня есть always_populate_raw_post_data
установить на 0 (отключено). Так, что происходит?Я не хочу «избегать предупреждения», устанавливая это значение в -1. Это просто скроет предупреждение, и я все равно буду использовать устаревшую конфигурацию. Я хочу решить проблему в ее источнике и знать, почему PHP так считает HTTP_RAW_POST_DATA
заселение включено.
Оказывается, мое понимание сообщения об ошибке было неверным. Я бы сказал, что в нем очень плохой выбор слов. Погуглив вокруг, показал мне, что кто-то другой неправильно понял сообщение точно так же, как я — видите Ошибка 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 не только избегает предупреждения, как сказано в сообщении, но также наконец отключает заполнить эту переменную, что я и хотел.
Я столкнулся с той же проблемой на сервере 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
Наконец перезагрузите сервер, и ошибка исчезла.
Прошло некоторое время, пока я не наткнулся на эту ошибку. Поднимите мой ответ для тех, кто может наткнуться на этот вопрос.
Ошибка только означает, что вы отправляете пустой запрос POST. Эта ошибка обычно встречается в HTTPRequests без параметров. Чтобы избежать этой ошибки, вы всегда можете добавить параметр в POST без изменения php.ini.
Подобно:
$.post(URL_HERE
,{addedvar : 'anycontent'}
,function(d){
doAnyHere(d);
}
,'json' //or 'html','text'
);
Если вы используете 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 (или нажмите перезапустить все сервисы)
Раскомментировать
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
Если .htaccess
файл недоступен, создайте его в корневой папке и пропустите эту строку кода.
Поместите это в .htaccess
файл (проверено работает хорошо для API)
<IfModule mod_php5.c>
php_value always_populate_raw_post_data -1
</IfModule>
Для тех, кто все еще борется с этой проблемой после изменения 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,
});
Я получил это сообщение об ошибке при отправке данных из HTML-формы (метод Post). Все, что мне нужно было сделать, это изменить кодировку в форме с «text / plain» на «application / x-www-form-urlencoded» или «multipart / form-data».
Сообщение об ошибке очень вводило в заблуждение.