Wenn Sie Daten über Ajax an das PHP-Programm übergeben, werden Sie feststellen, dass Sie die Daten nicht mit $_POST abrufen können. Sie können jedoch in Firebug sehen, dass der Beitrag tatsächlich JSON-Daten enthält mit print_r( file_get_contents("php://input")) Danach können Sie die JSON-Daten abrufen
Was ist also php://input?
An php:/ Zur Einführung von /input gibt es im offiziellen PHP-Handbuch einen Absatz, der es klar umreißt.
php://input ermöglicht das Lesen von POST-Rohdaten. Es ist eine weniger speicherintensive Alternative zu $HTTP_RAW_POST_DATA und erfordert keine speziellen php.ini-Anweisungen. php://input ist mit enctype nicht verfügbar ="multipart/form-data".
Übersetzt lautet das:
„php://input kann unverarbeitete POST-Daten lesen. Im Vergleich zu $HTTP_RAW_POST_DATA belastet es den Speicher weniger und erfordert keine speziellen php.ini-Einstellungen. php://input kann nicht für enctype=multipart/form-data verwendet werden.
1. Wenn der Content-Type-Wert application/x-www-form-urlencoded ist, fordert PHP die entsprechenden Daten von an Der http-Anforderungstext wird in das Array $_POST eingefüllt, und die in das Array $_POST eingefüllten Daten sind das Ergebnis der Analyse von urldecode() (tatsächlich gibt es zusätzlich zum Inhaltstyp auch Multipart/Formular). Daten, die darauf hinweisen, dass es sich bei den Daten um Formulardaten handelt, führen wir später ein)
2. php://Eingabedaten, solange der Inhaltstyp nicht multipart/form-data ist (diese Bedingung wird später eingeführt). ), dann php: //Eingabedaten und http-Entitätskörper. Die Länge dieses Teils der konsistenten Daten wird durch Content-Length 3 angegeben. Nur wenn Content-Type application/x-www ist -form-urlencoded und die Übermittlungsmethode ist die POST-Methode, $_POST-Daten und php://input-Daten sind „konsistent“ (die Anführungszeichen zeigen an, dass ihre Formate inkonsistent und ihr Inhalt konsistent sind). > 4. php://input. Das liegt daran, dass die $_GET-Daten in das PATH-Feld des http-Anfrage-Headers geschrieben werden und nicht in den Hauptteil der http-Anfrage 🎜>
Ich glaube, Sie haben bereits ein tiefes Verständnis für php://input. Was ist also $http_raw_post_data? Eine integrierte globale Variable in PHP. Sie wird verwendet, wenn PHP den Inhaltstyp nicht erkennen kann. Die POST-Daten werden so wie sie sind in die Variable $http_raw_post_data gefüllt. Außerdem können die POST-Daten nicht mit Content-Type multipart/form-data gelesen werden. Sie müssen den Wert „always_populate_raw_post_data“ in php.ini auf „On“ setzen, damit PHP immer gefüllt wird Geben Sie in den POST-Daten die Variable $http_raw_post_data ein. Hinweis 1. PHP fordert Daten nur von http an, wenn der Wert von Coentent-Type application/x-www-data-urlencoded und multipart/form- ist. Daten im Paket werden in die globale Variable $_POST
gefüllt. 2. Wenn PHP den Content-Type-Typ nicht erkennt, werden die entsprechenden Daten im http-Anforderungspaket in die Variable $ gefüllt HTTP_RAW_POST_DATA
3. Nur wenn Coentent-Type nicht multipart/form-data ist, füllt PHP die entsprechenden Daten im http-Anforderungspaket nicht in php://input ein, andernfalls ist es dasselbe in anderen Situationen. Die Länge der Auffüllung, angegeben durch Coentent-Length.
6. PHP füllt den query_path-Teil des PATH-Felds in die globale Variable $_GET ein. Normalerweise ist der Hauptteil einer von der GET-Methode übermittelten http-Anfrage leer.