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
, o always_populate_raw_post_data
valor está definido como 0
.
Além disso, como estou enviando uma application/json
solicitação, o PHP não a preenche $_POST
, e sim ao json_decode()
corpo da solicitação POST bruta, acessível por php://input
.
Como a resposta de @rites,
0 / desativado / qualquer que seja: comportamento do BC (preencha se o tipo de conteúdo não estiver registrado ou o método de solicitação for diferente de POST ).
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 para application/x-www-form-urlencoded
ou multipart/form-data
fará com que o PHP preencha o $_POST
corpo do POSTed (porque o PHP gosta / reconhece esses content-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 o php.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:
<?php
if(ini_get('always_populate_raw_post_data') != '-1')
{
// Get the path to php.ini file
$iniFilePath = php_ini_loaded_file();
// Get the php.ini file content
$iniContent = file_get_contents($iniFilePath);
// Un-comment (if commented) always_populate_raw_post_data line, and set its value to -1
$iniContent = preg_replace('~^\s*;?\s*always_populate_raw_post_data\s*=\s*.*$~im', 'always_populate_raw_post_data = -1', $iniContent);
// Write the content back to the php.ini file
file_put_contents($iniFilePath, $iniContent);
// Exit the php script here
// Also, write some response here to notify the user and ask to restart Apache / WAMP / Whatever.
exit;
}