Я переключился на 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
, always_populate_raw_post_data
0 (отключено). Так, что происходит? Я не хочу «избегать предупреждения», установив это значение равным -1. Это просто скроет предупреждение, и у меня все еще будет устаревшая конфигурация. Я хочу решить проблему в ее источнике и знать, почему PHP считает, что HTTP_RAW_POST_DATA
.
Оказывается, мое понимание сообщения об ошибке было неправильным. Я бы сказал, что у него очень плохой выбор слов. Googling вокруг показал мне, что кто-то еще неправильно понял сообщение точно так же, как я, – см. Ошибку PHP # 66763 .
После совершенно бесполезного «Это то, как хотели это RM». ответ на эту ошибку Майка, Тайраэль объясняет, что установка этого параметра на «-1» не означает, что предупреждение просто исчезнет. Он делает правильную вещь , то есть полностью отключает заполнение переменной преступника. Оказывается, при установке значения 0 STILL заполняет данные при некоторых обстоятельствах. Расскажите о плохом дизайне! Чтобы привести PHP RFC :
Измените параметр always_populate_raw_post_data INI, чтобы принять три значения вместо двух.
- -1: поведение мастера; никогда не заполняйте $ GLOBALS [HTTP_RAW_POST_DATA]
- 0 / off / whatever: поведение 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
и найдите значение файла Loaded Configuration File . В моем случае
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
Для тех, кто все еще борется с этой проблемой после изменения php.init, как предполагает принятый ответ. Поскольку ошибка возникает, когда петиция ajax производится через POST
без какого-либо параметра, все, что вам нужно сделать, это изменить метод отправки в GET
.
var xhr = $.ajax({ url: url, type: "GET", dataType: "html", timeout: 500, });
Еще один вариант, если вы хотите сохранить метод POST
по какой-либо причине, – это добавить пустой объект JSON в ajax petititon.
var xhr = $.ajax({ url: url, type: "POST", data: {name:'emtpy_petition_data', value: 'empty'} dataType: "html", timeout: 500, });
Если файл .htaccess
не avilable, создайте его в корневой папке и пропустите эту строку кода.
Поместите это в файл .htaccess
(хорошо протестированный для API)
<IfModule mod_php5.c> php_value always_populate_raw_post_data -1 </IfModule>