Я перешел на 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
заполнение включено.
Ответы:
Оказывается, я неправильно понял сообщение об ошибке. Я бы сказал, что в нем очень плохой подбор слов. Поиск в Google показал, что кто-то еще неправильно понял сообщение, как и я - см. Ошибку PHP # 66763 .
После совершенно бесполезного «Это то, как RM хотели, чтобы это было». В ответ на эту ошибку Майка Тираэль объясняет, что установка «-1» не означает просто предупреждение о необходимости исчезнуть. Он поступает правильно , то есть полностью отключает заполнение переменной-виновника. Оказывается, что при значении 0 при некоторых обстоятельствах данные все равно заполняются. Поговорим о плохом дизайне! Чтобы процитировать PHP RFC :
Так что да, установка значения -1 не только позволяет избежать предупреждения, как сказано в сообщении, но и, наконец, отключает заполнение этой переменной, чего я и хотел.
источник
always_populate_raw_post_data = -1
. по-прежнему появляется предупреждение иphp.ini
файлу и установить (или раскомментировать)always_populate_raw_post_data = -1
.To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead.
Прошло некоторое время, пока я не столкнулся с этой ошибкой. Выложите мой ответ для всех, кто может наткнуться на этот вопрос.
Ошибка означает только то, что вы отправляете пустой запрос POST. Эта ошибка обычно встречается в HTTPRequests без переданных параметров. Чтобы избежать этой ошибки, вы всегда можете добавить параметр в POST, не изменяя php.ini.
Подобно:
источник
У меня возникла такая же проблема на сервере nginx (DigitalOcean) - все, что мне нужно было сделать, это войти в систему
root
и изменить файл/etc/php5/fpm/php.ini
.Чтобы найти строку с
always_populate_raw_post_data
первым запускомgrep
:Это вернуло линию
704
Затем просто откройте
php.ini
эту строку вvi
редакторе:Удалите точку с запятой, чтобы раскомментировать его и сохранить файл.
:wq
Наконец, перезагрузите сервер, и ошибка исчезла.
источник
php.ini
вы, вероятно, используете конфигурацию разработки php.ini.Вы должны добавить или раскомментировать свойство
always_populate_raw_post_data
вphp.ini
и установите его значение-1
. В моем случаеphp.ini
находится в:C:\wamp64\bin\php\php5.6.25\php.ini
Наконец, перезапустите WAMP (или нажмите перезапустить все службы)
источник
Если
.htaccess
файл недоступен, создайте его в корневой папке и пропустите эту строку кода.Поместите это в
.htaccess
файл (проверено, хорошо работает для API)источник
Раскомментируя
в php.ini (строка # 703) и перезапуск служб APACHE в любом случае поможет мне избавиться от сообщения
источник
Для тех, кто все еще борется с этой проблемой после изменения php.init, как предполагает принятый ответ. Поскольку ошибка возникает, когда петиция ajax
POST
отправляется без каких-либо параметров, все, что вам нужно сделать, это изменить метод отправки наGET
.Еще один вариант, если вы хотите сохранить метод
POST
по какой-либо причине, - это добавить пустой объект JSON в петититон ajax.источник
Я получил это сообщение об ошибке при отправке данных из html-формы (метод Post). Все, что мне нужно было сделать, это изменить кодировку в форме с «text / plain» на «application / x-www-form-urlencoded» или «multipart / form-data». Сообщение об ошибке вводило в заблуждение.
источник
К сожалению, этот ответ здесь @EatOng это не правильно . Прочитав его ответ, я добавил фиктивную переменную к каждому запросу AJAX, который я запускал (даже если у некоторых из них уже были поля), чтобы убедиться, что ошибка никогда не появится.
Но только сейчас наткнулся на ту же чертову ошибку PHP. Я дважды подтвердил, что отправил некоторые данные POST (также некоторые другие поля вместе с фиктивной переменной). Версия PHP
5.6.25
,always_populate_raw_post_data
установлено значение0
.Кроме того, когда я отправляю
application/json
запрос, PHP не заполняет его$_POST
, а мне нужноjson_decode()
необработанное тело запроса POST, доступное черезphp://input
.Как ответил @ rr-cites,
Поскольку метод запроса - это точно POST, я думаю, PHP не распознал / не понравился мой
Content-Type: application/json
запрос (опять же, почему ??).ОПЦИЯ 1:
Отредактируйте
php.ini
файл вручную и установите для переменной виновника значение-1
, как предлагают многие ответы здесь.ВАРИАНТ 2:
Это ошибка PHP 5.6. Обновите PHP.
ВАРИАНТ 3:
Как здесь ответил @ user9541305, изменение
Content-Type
запроса AJAX наapplication/x-www-form-urlencoded
илиmultipart/form-data
заставит PHP заполнять$_POST
из тела POSTed (потому что PHP любит / распознает этиcontent-type
заголовки !?).ВАРИАНТ 4: ПОСЛЕДНИЙ КУРОРТ
Что ж, я не хотел менять
Content-Type
AJAX, это вызвало бы много проблем при отладке. (Chrome DevTools прекрасно просматривает переменные POSTed запросов JSON.)Я разрабатываю эту вещь для клиента и не могу попросить его использовать последнюю версию PHP или редактировать файл php.ini. В крайнем случае, я просто проверю, установлен ли он,
0
и если да, то отредактируюphp.ini
файл в самом моем PHP-скрипте. Конечно, мне придется попросить пользователя перезапустить apache. Какая жалость!Вот пример кода:
источник
Что ж, если есть кто-то на общем хостинге и без доступа к
php.ini
файлу, вы можете установить эту строку кода в самом верху ваших файлов PHP:Работает примерно так же. Надеюсь, это сэкономит кому-то время на отладку :)
источник
NB: ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ PHPSTORM
Я потратил час, пытаясь решить эту проблему, думая, что это проблема моего php-сервера, поэтому я установил 'always_populate_raw_post_data' в '-1' в php.ini, и ничего не сработало.
Пока я не узнал, что использование встроенного сервера phpStorm является причиной проблемы, как подробно описано в ответе здесь: Ответ от LazyOne Здесь , поэтому я подумал о том, чтобы поделиться им.
источник
; always_populate_raw_post_data = -1 в php.init удалить комментарий этой строки .. always_populate_raw_post_data = -1
источник
Я только что получил от друга решение этой проблемы. он сказал: добавьте ob_start (); под кодом вашей сессии. Вы можете добавить exit (); под шапкой. Я попробовал, и это сработало. Надеюсь это поможет
Это для тех, кто находится на арендованном сервере хостинга и не имеет доступа к файлу php.init.
источник