Ich habe auf PHP 5.6.0 umgestellt und bekomme jetzt überall folgende Warnung:
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
Gut, ich verlasse mich auf eine veraltete Funktion. Nur dass ich es nicht tue!
- Ich habe diese Variable noch nie in einem meiner Skripte verwendet. Um ehrlich zu sein, hatte ich keine Ahnung, dass es überhaupt existiert.
phpinfo()
zeigt, dass ichalways_populate_raw_post_data
auf 0 gesetzt habe (deaktiviert). Also, was ist los?
Ich möchte die Warnung nicht vermeiden, indem ich diesen Wert auf -1 setze. Dadurch wird nur die Warnung ausgeblendet, und die Konfiguration ist weiterhin veraltet. Ich möchte das Problem an der Quelle lösen und wissen, warum PHP glaubt, dass das Auffüllen aktiviert HTTP_RAW_POST_DATA
ist.
Antworten:
Es stellt sich heraus, dass mein Verständnis der Fehlermeldung falsch war. Ich würde sagen, es bietet eine sehr schlechte Wortwahl. Das Googeln hat mir gezeigt, dass jemand anderes die Nachricht genauso missverstanden hat wie ich - siehe PHP-Fehler # 66763 .
Nach völlig wenig hilfreich "So wollten es die RMs." Als Antwort auf diesen Fehler von Mike erklärt Tyrael, dass das Setzen auf "-1" nicht nur die Warnung ist, wegzugehen. Es macht das Richtige , dh es deaktiviert das Auffüllen der Tätervariablen vollständig. Es stellt sich heraus, dass die Einstellung auf 0 STILL unter bestimmten Umständen Daten auffüllt . Sprechen Sie über schlechtes Design! So zitieren Sie PHP RFC :
Wenn Sie also auf -1 setzen, wird nicht nur die Warnung vermieden, wie in der Nachricht angegeben, sondern es wird auch das Auffüllen dieser Variablen deaktiviert , was ich wollte.
quelle
always_populate_raw_post_data = -1
. noch jetzt kommt die Warnung und korrumpiert die json Antwortphp.ini
Datei zu gehen und zu setzen (oder zu kommentieren)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.
Es ist eine Weile her, bis ich auf diesen Fehler stieß. Stellen Sie meine Antwort für jeden auf, der über dieses Problem stolpern könnte.
Der Fehler bedeutet nur, dass Sie eine leere POST-Anfrage senden. Dieser Fehler tritt häufig bei HTTPRequests auf, bei denen keine Parameter übergeben wurden. Um diesen Fehler zu vermeiden, können Sie dem POST jederzeit einen Parameter hinzufügen, ohne die php.ini zu ändern.
Mögen:
quelle
Auf dem Nginx-Server (DigitalOcean) trat das gleiche Problem auf. Ich musste mich lediglich als anmelden
root
und die Datei ändern/etc/php5/fpm/php.ini
.So finden Sie die Zeile mit dem
always_populate_raw_post_data
ich zuerst laufegrep
:Das gab die Linie zurück
704
Dann öffnen Sie einfach
php.ini
in dieser Zeile mit demvi
Editor:Entfernen Sie das Semikolon, um es zu kommentieren und die Datei zu speichern
:wq
Zuletzt den Server neu starten und der Fehler behoben.
quelle
php.ini
auskommentiert ist, verwenden Sie wahrscheinlich eine Entwicklungskonfiguration von php.ini.Sie sollten die Eigenschaft hinzufügen oder Kommentar-
always_populate_raw_post_data
inphp.ini
und seinen Wert auf-1
. In meinem Fallphp.ini
befindet sich in:C:\wamp64\bin\php\php5.6.25\php.ini
Starten Sie schließlich WAMP neu (oder klicken Sie auf Alle Dienste neu starten).
quelle
Wenn die
.htaccess
Datei nicht verfügbar ist, erstellen Sie sie im Stammordner und hinter dieser Codezeile.Legen Sie dies in eine
.htaccess
Datei (getestet gut funktioniert für API)quelle
Kommentar aus dem
In der php.ini (Zeile 703) und beim Neustart der APACHE-Dienste kann ich die Nachricht trotzdem entfernen
quelle
Für alle, die nach dem Ändern der php.init noch mit diesem Problem zu kämpfen haben, wie die akzeptierte Antwort nahelegt. Da der Fehler auftritt, wenn eine Ajax-Petition
POST
ohne Parameter eingereicht wird , müssen Sie lediglich die Sendemethode in ändernGET
.Eine weitere Option, wenn Sie die Methode
POST
aus irgendeinem Grund beibehalten möchten, ist das Hinzufügen eines leeren JSON-Objekts zur Ajax-Petition.quelle
Ich habe diese Fehlermeldung beim Senden von Daten aus einem HTML-Formular (Post-Methode) erhalten. Ich musste lediglich die Codierung im Formular von "text / plain" in "application / x-www-form-urlencoded" oder "multipart / form-data" ändern. Die Fehlermeldung war sehr irreführend.
quelle
Leider ist diese Antwort hier von @EatOng nicht korrekt . Nachdem ich seine Antwort gelesen hatte, fügte ich jeder AJAX-Anfrage, die ich auslöste, eine Dummy-Variable hinzu (auch wenn einige bereits Felder hatten), um sicherzugehen, dass der Fehler nie auftritt.
Aber gerade jetzt bin ich auf den gleichen verdammten Fehler von PHP gestoßen. Ich habe doppelt bestätigt, dass ich einige POST-Daten gesendet habe (einige andere Felder zusammen mit der Dummy-Variablen). PHP-Version
5.6.25
,always_populate_raw_post_data
Wert ist auf gesetzt0
.Während ich eine
application/json
Anfrage sende , füllt PHP sie nicht an$_POST
, sondern muss anjson_decode()
den POST-Anfragetext, auf den über zugegriffen werden kannphp://input
.Wie die Antwort von @ rrcites lautet,
Da die Anforderungsmethode sicher POST ist, hat PHP meine wohl nicht erkannt / gemocht
Content-Type: application/json
Anfrage gemocht (wieder, warum?).OPTION 1:
Bearbeiten Sie die
php.ini
Datei manuell und setzen Sie die Tätervariable auf-1
, wie viele der Antworten hier vermuten lassen.OPTION 2:
Dies ist ein PHP 5.6-Fehler. Aktualisieren Sie PHP.
OPTION 3:
Wie @ user9541305 hier antwortete, führt das Ändern der
Content-Type
AJAX-Anforderung zuapplication/x-www-form-urlencoded
odermultipart/form-data
führt dazu, dass PHP$_POST
den POST-Text ausfüllt (weil PHP diesecontent-type
Header mag / erkennt !?).OPTION 4: LETZTE RESORT
Nun, ich wollte das
Content-Type
von AJAX nicht ändern , es würde eine Menge Probleme beim Debuggen verursachen. (Chrome DevTools zeigt die POST-Variablen von JSON-Anforderungen gut an.)Ich entwickle dieses Ding für einen Client und kann ihn nicht bitten, das neueste PHP zu verwenden oder die Datei php.ini zu bearbeiten. Als letzten Ausweg werde ich nur prüfen, ob es eingestellt ist,
0
und wenn ja, das bearbeitenphp.ini
Datei in meinem PHP-Skript selbst . Natürlich muss ich den Benutzer bitten, Apache neu zu starten. Schade!Hier ist ein Beispielcode:
quelle
Wenn sich jemand auf einem gemeinsam genutzten Hosting befindet und keinen Zugriff auf
php.ini
Dateien hat, können Sie diese Codezeile ganz oben in Ihren PHP-Dateien festlegen:Funktioniert eher gleich. Ich hoffe, es spart jemandem etwas Debugging-Zeit :)
quelle
NB: WENN SIE PHPSTORM VERWENDEN
Ich verbrachte eine Stunde versucht , dieses Problem zu lösen, zu denken , dass es mein PHP - Server - Problem war, so dass ich gesetzt ‚always_populate_raw_post_data‘ auf ‚-1‘ in der php.ini und nichts funktionierte.
Bis ich herausfand, dass die Verwendung des in phpStorm integrierten Servers das Problem verursacht, wie in der Antwort hier beschrieben: Antwort von LazyOne Here , also habe ich darüber nachgedacht, es zu teilen.
quelle
;; always_populate_raw_post_data = -1 in php.init Kommentar dieser Zeile entfernen .. always_populate_raw_post_data = -1
quelle
Ich habe gerade die Lösung für dieses Problem von einem Freund bekommen. er sagte: Füge ob_start () hinzu; unter Ihrem Sitzungscode. Sie können exit () hinzufügen; unter der Überschrift. Ich habe es versucht und es hat funktioniert. Hoffe das hilft
Dies ist für diejenigen auf einem gemieteten Hosting-Server, die keinen Zugriff auf die Datei php.init haben.
quelle