Je suis passé à PHP 5.6.0 et maintenant je reçois l'avertissement suivant partout:
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
Très bien, je compte sur une fonctionnalité obsolète. Sauf que non!
- Je n'ai jamais utilisé cette variable dans aucun de mes scripts. Pour être honnête, je ne savais même pas qu'il existe.
phpinfo()
montre que j'aialways_populate_raw_post_data
mis à 0 (désactivé). Alors, quoi de neuf?
Je ne veux pas "éviter l'avertissement" en définissant cette valeur sur -1. Cela masquera simplement l'avertissement et j'aurai toujours une configuration obsolète. Je veux résoudre le problème à sa source et savoir pourquoi PHP pense que le HTTP_RAW_POST_DATA
remplissage est activé.
Réponses:
Il s'avère que ma compréhension du message d'erreur était erronée. Je dirais qu'il comporte un très mauvais choix de mots. Googler m'a montré que quelqu'un d'autre avait mal compris le message exactement comme je l'ai fait - voir le bogue PHP # 66763 .
Après totalement inutile "C'est comme ça que les MR voulaient que ce soit." réponse à ce bogue par Mike, Tyrael explique que le mettre à "-1" ne fait pas simplement disparaître l'avertissement. Il fait ce qu'il faut , c'est-à-dire qu'il désactive complètement le remplissage de la variable coupable. Il s'avère que l'avoir réglé sur 0 ENCORE remplit les données dans certaines circonstances. Parlez de mauvais design! Pour citer PHP RFC :
Donc oui, le mettre à -1 évite non seulement l'avertissement, comme le message l'a dit, mais cela désactive également le remplissage de cette variable, ce que je voulais.
la source
always_populate_raw_post_data = -1
. encore maintenant l'avertissement à venir et corrompant la réponse jsonphp.ini
fichier et de définir (ou de décommenter)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.
Cela fait un certain temps que je tombe sur cette erreur. Mettez ma réponse pour quiconque pourrait tomber sur ce problème.
L'erreur signifie uniquement que vous envoyez une requête POST vide. Cette erreur se trouve généralement sur les requêtes HTTP sans aucun paramètre passé. Pour éviter cette erreur, vous pouvez toujours ajouter un paramètre au POST sans changer le php.ini.
Comme:
la source
J'ai rencontré le même problème sur le serveur nginx (DigitalOcean) - tout ce que j'avais à faire était de me connecter
root
et de modifier le fichier/etc/php5/fpm/php.ini
.Pour trouver la ligne avec le
always_populate_raw_post_data
premier rungrep
:Qui a renvoyé la ligne
704
Ensuite, ouvrez simplement
php.ini
sur cette ligne avec l'vi
éditeur:Supprimez le point-virgule pour le décommenter et enregistrez le fichier
:wq
Enfin, redémarrez le serveur et l'erreur a disparu.
la source
php.ini
vous utilisez probablement une configuration de développement de php.ini.vous devez ajouter ou décommenter la propriété
always_populate_raw_post_data
dansphp.ini
et définir sa valeur sur-1
. Dans mon casphp.ini
est situé dans:C:\wamp64\bin\php\php5.6.25\php.ini
Enfin, redémarrez WAMP (ou cliquez sur redémarrer tous les services)
la source
Si la
.htaccess
fichier n'est pas disponible, créez-le sur le dossier racine et passez cette ligne de code.Mettez ceci dans un
.htaccess
fichier (testé fonctionne bien pour l'API)la source
Décommenter le
dans php.ini (ligne # 703) et le redémarrage des services APACHE m'aident quand même à me débarrasser du message
la source
Pour tous ceux qui ont encore des difficultés avec ce problème après avoir changé le php.init comme le suggère la réponse acceptée. Puisque l'erreur se produit lorsqu'une requête ajax est effectuée via
POST
sans aucun paramètre, tout ce que vous avez à faire est de changer la méthode d'envoi enGET
.Encore une autre option si vous souhaitez conserver la méthode
POST
pour une raison quelconque est d'ajouter un objet JSON vide au petititon ajax.la source
J'ai reçu ce message d'erreur lors de l'envoi de données à partir d'un formulaire html (méthode Post). Tout ce que j'avais à faire était de changer l'encodage sous la forme de "text / plain" à "application / x-www-form-urlencoded" ou "multipart / form-data". Le message d'erreur était très trompeur.
la source
Malheureusement, cette réponse de @EatOng n'est pas correcte . Après avoir lu sa réponse, j'ai ajouté une variable factice à chaque requête AJAX que je tirais (même si certaines d'entre elles avaient déjà des champs) juste pour être sûr que l'erreur n'apparaît jamais.
Mais tout à l'heure, je suis tombé sur la même foutue erreur de PHP. J'ai double-confirmé que j'avais envoyé des données POST (d'autres champs aussi avec la variable factice). Version PHP
5.6.25
, laalways_populate_raw_post_data
valeur est définie sur0
.De plus, comme j'envoie une
application/json
requête, PHP ne la remplit pas$_POST
, je dois plutôtjson_decode()
le corps de la requête POST brut, accessible parphp://input
.Comme la réponse de @ rr- le cite,
Parce que la méthode de requête est à coup sûr POST, je suppose que PHP n'a pas reconnu / aimé ma
Content-Type: application/json
requête (encore une fois, pourquoi ??).OPTION 1:
Modifiez le
php.ini
fichier manuellement et définissez la variable coupable sur-1
, comme le suggèrent de nombreuses réponses ici.OPTION 2:
Il s'agit d'un bogue PHP 5.6. Mettez à jour PHP.
OPTION 3:
Comme @ user9541305 a répondu ici, changer la
Content-Type
requête de AJAX enapplication/x-www-form-urlencoded
oumultipart/form-data
fera remplir PHP le à$_POST
partir du corps POSTed (parce que PHP aime / reconnaît ces en-content-type
têtes !?).OPTION 4: DERNIER RESORT
Eh bien, je ne voulais pas changer le
Content-Type
d'AJAX, cela causerait beaucoup de problèmes pour le débogage. (Chrome DevTools affiche bien les variables POSTées des requêtes JSON.)Je développe cette chose pour un client et je ne peux pas leur demander d'utiliser le dernier PHP, ni d'éditer le fichier php.ini. En dernier recours, je vais simplement vérifier si elle est définie sur
0
et si oui, modifier lephp.ini
je fichier dans mon script PHP lui-même. Bien sûr, je devrai demander à l'utilisateur de redémarrer apache. C'est dommage!Voici un exemple de code:
la source
Eh bien, s'il y a quelqu'un sur un hébergement partagé et sans accès au
php.ini
fichier, vous pouvez définir cette ligne de code tout en haut de vos fichiers PHP:Fonctionne plus de la même manière. J'espère que cela fera gagner du temps à quelqu'un pour le débogage :)
la source
NB: SI VOUS UTILISEZ PHPSTORM
J'ai passé une heure à essayer de résoudre ce problème, pensant que c'était mon problème de serveur php, donc j'ai mis 'always_populate_raw_post_data' à '-1' dans php.ini et rien n'a fonctionné.
Jusqu'à ce que je découvre que l'utilisation du serveur intégré phpStorm est ce qui cause le problème, comme détaillé dans la réponse ici: Réponse de LazyOne Ici , j'ai donc pensé à le partager.
la source
; always_populate_raw_post_data = -1 dans php.init supprimer le commentaire de cette ligne .. always_populate_raw_post_data = -1
la source
Je viens de recevoir la solution à ce problème d'un ami. il a dit: Ajoutez ob_start (); sous votre code de session. Vous pouvez ajouter exit (); sous l'en-tête. Je l'ai essayé et cela a fonctionné. J'espère que cela t'aides
Ceci est pour ceux sur un serveur d'hébergement loué qui n'ont pas accès au fichier php.init.
la source