Eu mudei para o PHP 5.6.0 e agora recebo o seguinte aviso em todos os lugares:
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
Tudo bem, eu confio em algum recurso obsoleto. Exceto que eu não!
- Eu nunca usei essa variável em nenhum dos meus scripts. Para ser sincero, eu não fazia ideia de que ele existe.
phpinfo()
mostra que eualways_populate_raw_post_data
configurei para 0 (desativado). Então, o que está acontecendo?
Não quero "evitar o aviso" definindo esse valor como -1. Isso apenas ocultará o aviso e ainda terei a configuração descontinuada. Quero resolver o problema na sua origem e saber por que o PHP acha que o HTTP_RAW_POST_DATA
preenchimento está ativado.
Respostas:
Acontece que meu entendimento da mensagem de erro estava errado. Eu diria que apresenta uma escolha muito pobre de palavras. Pesquisando por aí me mostrou que alguém entendeu mal a mensagem exatamente como eu - veja o bug no PHP # 66763 .
Depois de totalmente inútil "Era assim que os RMs queriam que fosse". resposta a esse bug por Mike, Tyrael explica que defini-lo como "-1" não faz apenas o aviso para desaparecer. Ele faz a coisa certa , ou seja, desativa completamente o preenchimento da variável culpada. Acontece que defini-lo como 0 AINDA preenche os dados sob algumas circunstâncias. Fale sobre design ruim! Para citar o PHP RFC :
Então, defini-lo como -1 não apenas evita o aviso, como a mensagem dizia, mas também desabilita o preenchimento dessa variável, que é o que eu queria.
fonte
always_populate_raw_post_data = -1
. Ainda agora o aviso chegando e corrompendo a resposta JSONphp.ini
arquivo e definir (ou descomentar)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.
Já faz um tempo até que me deparei com esse erro. Coloque minha resposta para qualquer um que tropeçar nessa questão.
O erro significa apenas que você está enviando uma solicitação POST vazia. Esse erro geralmente é encontrado em HTTPRequests sem parâmetros passados. Para evitar esse erro, você sempre pode adicionar um parâmetro ao POST sem alterar o php.ini.
Gostar:
fonte
Tive o mesmo problema no servidor nginx (DigitalOcean) - tudo o que eu precisava fazer era fazer login como
root
e modificar o arquivo/etc/php5/fpm/php.ini
.Para encontrar a linha com a
always_populate_raw_post_data
primeira execuçãogrep
:Que retornou a linha
704
Em seguida, basta abrir
php.ini
nessa linha com ovi
editor:Remova o ponto e vírgula para remover o comentário e salvar o arquivo
:wq
Por fim, reinicie o servidor e o erro desapareceu.
fonte
php.ini
provavelmente você está usando uma configuração de desenvolvimento do php.ini.você deve adicionar ou remover o comentário da propriedade
always_populate_raw_post_data
emphp.ini
e defina seu valor como-1
. No meu caso,php.ini
está localizado em:C:\wamp64\bin\php\php5.6.25\php.ini
Finalmente, reinicie o WAMP (ou clique em reiniciar todos os serviços)
fonte
Se o
.htaccess
arquivo não estiver disponível, crie-o na pasta raiz e passe esta linha de código.Coloque isso no
.htaccess
arquivo (testado funcionando bem para API)fonte
Descomentando o
no php.ini (linha 703) e reiniciar os serviços do APACHE me ajudam a me livrar da mensagem de qualquer maneira
fonte
Para quem ainda está lutando com esse problema depois de alterar o php.init, como sugere a resposta aceita. Como o erro ocorre quando uma petição ajax é feita
POST
sem nenhum parâmetro, tudo o que você precisa fazer é alterar o método send paraGET
.Ainda uma outra opção, se você deseja manter o método
POST
por qualquer motivo, é adicionar um objeto JSON vazio ao petititon ajax.fonte
Recebi essa mensagem de erro ao enviar dados de um formulário html (método Post). Tudo o que eu precisava fazer era alterar a codificação no formulário de "texto / sem formatação" para "application / x-www-form-urlencoded" ou "multipart / form-data". A mensagem de erro foi muito enganosa.
fonte
Infelizmente, esta resposta aqui de @EatOng não está correta . Depois de ler sua resposta, adicionei uma variável fictícia a cada solicitação AJAX que eu estava disparando (mesmo que algumas delas já tivessem alguns campos) apenas para garantir que o erro nunca apareça.
Mas agora eu me deparei com o mesmo erro do PHP. Confirmei duas vezes que havia enviado alguns dados POST (alguns outros campos também junto com a variável dummy). Versão do PHP
5.6.25
, oalways_populate_raw_post_data
valor está definido como0
.Além disso, como estou enviando uma
application/json
solicitação, o PHP não a preenche$_POST
, e sim aojson_decode()
corpo da solicitação POST bruta, acessível porphp://input
.Como a resposta de @rites,
Como o método request é certamente o POST, acho que o PHP não reconheceu / gostou do meu
Content-Type: application/json
pedido (novamente, por quê?).OPÇÃO 1:
Edite o
php.ini
arquivo manualmente e defina a variável culpada-1
como, como sugerem muitas das respostas aqui.OPÇÃO 2:
Este é um bug do PHP 5.6. Atualize o PHP.
OPÇÃO 3:
Como o @ user9541305 respondeu aqui, alterar a
Content-Type
solicitação AJAX paraapplication/x-www-form-urlencoded
oumultipart/form-data
fará com que o PHP preencha o$_POST
corpo do POSTed (porque o PHP gosta / reconhece essescontent-type
cabeçalhos !?).OPÇÃO 4: ÚLTIMO RECURSO
Bem, eu não queria mudar o
Content-Type
AJAX, isso causaria muitos problemas para depuração. (O Chrome DevTools exibe bem as variáveis POSTed das solicitações JSON.)Estou desenvolvendo isso para um cliente e não posso pedir que ele use o PHP mais recente nem edite o arquivo php.ini. Como último recurso, apenas verificarei se está definido
0
e, em caso afirmativo, edite ophp.ini
arquivo no meu próprio script PHP. Claro que terei que pedir ao usuário para reiniciar o apache. Que pena!Aqui está um código de exemplo:
fonte
Bem, se houver alguém por aí em uma hospedagem compartilhada e sem acesso ao
php.ini
arquivo, você pode definir esta linha de código no topo dos seus arquivos PHP:Funciona mais do mesmo. Espero que poupa a alguém algum tempo de depuração :)
fonte
NB: SE VOCÊ ESTÁ USANDO PHPSTORM
Passei uma hora tentando resolver esse problema, pensando que era o meu problema no servidor php. Então, configurei 'always_populate_raw_post_data' para '-1' no php.ini e nada funcionou.
Até que eu descobri que o uso do servidor phpStorm embutido é o que está causando o problema, conforme detalhado na resposta aqui: Resposta por LazyOne Aqui , pensei em compartilhá-lo.
fonte
; always_populate_raw_post_data = -1 no php.init remove o comentário desta linha .. always_populate_raw_post_data = -1
fonte
Acabei de receber a solução para este problema de um amigo. ele disse: Adicione ob_start (); sob o código da sua sessão. Você pode adicionar exit (); sob o cabeçalho. Eu tentei e funcionou. Espero que isto ajude
Isto é para aqueles em um servidor de hospedagem alugado que não tem acesso ao arquivo php.init.
fonte