Desafortunadamente, esta respuesta aquí por @EatOng no es correcta . Después de leer su respuesta, agregué una variable ficticia a cada solicitud AJAX que estaba disparando (incluso si algunos de ellos ya tenían algunos campos) solo para asegurarme de que el error nunca aparece.
Pero justo ahora me encontré con el mismo maldito error de PHP. Confirmé dos veces que había enviado algunos datos POST (algunos otros campos también junto con la variable ficticia). Versión de PHP 5.6.25
, el always_populate_raw_post_data
valor se establece en0
.
Además, como estoy enviando una application/json
solicitud, PHP no la está completando $_POST
, sino que tengo que json_decode()
ingresar al cuerpo de la solicitud POST sin procesar, accesible por php://input
.
Como la respuesta de @ rr- cita,
0 / apagado / lo que sea: comportamiento de BC (se completa si el tipo de contenido no está registrado o si el método de solicitud es diferente a POST ).
Debido a que el método de solicitud es POST seguro, supongo que PHP no reconoció / me gustó mi Content-Type: application/json
solicitud (de nuevo, ¿por qué?).
OPCIÓN 1:
Edite el php.ini
archivo manualmente y establezca la variable culpable en -1
, como sugieren muchas de las respuestas aquí.
OPCION 2:
Este es un error de PHP 5.6. Actualiza PHP.
OPCION 3:
Como @ user9541305 respondió aquí, cambiar la Content-Type
solicitud de AJAX application/x-www-form-urlencoded
o multipart/form-data
hará que PHP $_POST
complete el mensaje desde el cuerpo POSTed (¡porque PHP le gusta / reconoce esos content-type
encabezados !?).
OPCIÓN 4: ÚLTIMO RECURSO
Bueno, no quería cambiar el Content-Type
de AJAX, causaría muchos problemas para la depuración. (Chrome DevTools visualiza muy bien las variables POST de solicitudes JSON).
Estoy desarrollando esto para un cliente y no puedo pedirles que usen PHP más reciente ni que editen el archivo php.ini. Como último recurso, solo comprobaré si está configurado 0
y, de ser así, editaré el php.ini
archivo en mi script PHP. Por supuesto, tendré que pedirle al usuario que reinicie Apache. ¡Qué lástima!
Aquí hay un código de muestra:
<?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;
}