Cambié a PHP 5.6.0 y ahora aparece la siguiente advertencia en todas partes:
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
Bien, confío en alguna característica obsoleta. ¡Excepto que yo no!
- Nunca he usado esta variable en ninguno de mis scripts. Para ser honesto, no tenía idea de que existe.
phpinfo()
muestra que healways_populate_raw_post_data
establecido en 0 (deshabilitado). ¿Entonces qué está pasando?
No quiero "evitar la advertencia" estableciendo este valor en -1. Esto solo ocultará la advertencia y aún tendré una configuración obsoleta. Quiero resolver el problema en su origen y saber por qué PHP piensa que el HTTP_RAW_POST_DATA
llenado está activado.
Respuestas:
Resulta que mi comprensión del mensaje de error fue incorrecta. Yo diría que presenta una elección de palabras muy pobre. Buscar en Google me mostró que alguien más entendió mal el mensaje exactamente como lo hice yo; vea el error PHP # 66763 .
Después de ser totalmente inútil "Así es como los RM querían que fuera". En respuesta a ese error de Mike, Tyrael explica que establecerlo en "-1" no solo hace que la advertencia desaparezca. Hace lo correcto , es decir, deshabilita por completo el llenado de la variable culpable. Resulta que tenerlo configurado en 0 STILL llena datos en algunas circunstancias. ¡Habla sobre el mal diseño! Para citar PHP RFC :
Entonces, sí, establecerlo en -1 no solo evita la advertencia, como dice el mensaje, sino que finalmente deshabilita el llenado de esta variable, que es lo que quería.
fuente
always_populate_raw_post_data = -1
. todavía ahora viene la advertencia y corrompe la respuesta de jsonphp.ini
archivo y establecer (o 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.
Ha pasado un tiempo hasta que me encontré con este error. Presente mi respuesta para cualquiera que pueda tropezar con este problema.
El error solo significa que está enviando una solicitud POST vacía. Este error se encuentra comúnmente en HTTPRequests sin pasar parámetros. Para evitar este error, siempre puede agregar un parámetro a la POST sin cambiar el php.ini.
Me gusta:
fuente
Experimenté el mismo problema en el servidor nginx (DigitalOcean): todo lo que tuve que hacer es iniciar sesión como
root
y modificar el archivo/etc/php5/fpm/php.ini
.Para encontrar la línea con la
always_populate_raw_post_data
primera vez que corrogrep
:Eso devolvió la línea
704
Luego simplemente abra
php.ini
en esa línea con elvi
editor:Elimine el punto y coma para descomentarlo y guarde el archivo
:wq
Por último, reinicie el servidor y el error desapareció.
fuente
php.ini
, probablemente esté utilizando una configuración de desarrollo de php.ini.se debe añadir o eliminar el comentario de la propiedad
always_populate_raw_post_data
enphp.ini
y establezca su valor a-1
. En mi casophp.ini
se encuentra en:C:\wamp64\bin\php\php5.6.25\php.ini
Finalmente reinicie WAMP (o haga clic en reiniciar todos los servicios)
fuente
Si el
.htaccess
archivo no está disponible, créelo en la carpeta raíz y pase esta línea de código.Ponga esto en el
.htaccess
archivo (probado funcionando bien para API)fuente
Descomentando el
en php.ini (línea # 703) y reiniciar los servicios APACHE me ayudan a deshacerme del mensaje de todos modos
fuente
Para cualquiera que todavía tenga problemas con este problema después de cambiar el php.init como sugiere la respuesta aceptada. Dado que el error ocurre cuando se realiza una petición ajax
POST
sin ningún parámetro, todo lo que tiene que hacer es cambiar el método de envío aGET
.Aún otra opción si desea mantener el método
POST
por cualquier motivo es agregar un objeto JSON vacío al petititon ajax.fuente
Recibí este mensaje de error al enviar datos desde un formulario html (método Post). Todo lo que tenía que hacer era cambiar la codificación en el formulario de "text / plain" a "application / x-www-form-urlencoded" o "multipart / form-data". El mensaje de error fue muy engañoso.
fuente
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
, elalways_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 quejson_decode()
ingresar al cuerpo de la solicitud POST sin procesar, accesible porphp://input
.Como la respuesta de @ rr- cita,
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 AJAXapplication/x-www-form-urlencoded
omultipart/form-data
hará que PHP$_POST
complete el mensaje desde el cuerpo POSTed (¡porque PHP le gusta / reconoce esoscontent-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é elphp.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:
fuente
Bueno, si hay alguien en un hosting compartido y sin acceso al
php.ini
archivo, puede configurar esta línea de código en la parte superior de sus archivos PHP:Funciona más de lo mismo. Espero que le ahorre a alguien algo de tiempo de depuración :)
fuente
NB: SI USTED ESTÁ USANDO PHPSTORM
Pasé una hora tratando de resolver este problema, pensando que era mi problema con el servidor php, así que configuré 'always_populate_raw_post_data' en '-1' en php.ini y nada funcionó.
Hasta que descubrí que el uso del servidor integrado phpStorm es lo que causa el problema como se detalla en la respuesta aquí: Respuesta de LazyOne Aquí , así que pensé en compartirlo.
fuente
; always_populate_raw_post_data = -1 en php.init eliminar el comentario de esta línea .. always_populate_raw_post_data = -1
fuente
Acabo de recibir la solución a este problema de un amigo. él dijo: Agregar ob_start (); bajo su código de sesión. Puede agregar exit (); debajo del encabezado Lo intenté y funcionó. Espero que esto ayude
Esto es para aquellos en un servidor de alojamiento alquilado que no tienen acceso al archivo php.init.
fuente