PHP "php: // Eingabe" vs $ _POST

154

Ich wurde angewiesen, die Methode php://input anstelle von $_POST zu verwenden, wenn ich mit Ajax-Anfragen von JQuery interagiere. Was ich nicht verstehe, sind die Vorteile der Verwendung dieser Methode gegenüber der globalen Methode $_POST oder $_GET .

    
Lee 17.01.2012, 11:08
quelle

3 Antworten

305

Der Grund ist, dass php://input unabhängig vom Inhaltstyp alle Rohdaten nach den HTTP-Headern der Anfrage zurückgibt.

Die PHP superglobal $_POST , nur soll Daten umhüllen, die entweder

sind
  • application/x-www-form-urlencoded (Standard-Inhaltstyp für einfache Formular-Posts) oder
  • multipart/form-data-encoded (wird hauptsächlich für Datei-Uploads verwendet)

Dies liegt daran, dass dies die einzigen Inhaltstypen sind, die müssen wird von Benutzeragenten unterstützt . Daher erwarten der Server und PHP normalerweise keinen anderen Inhaltstyp (was nicht bedeutet, dass sie nicht können).

Wenn Sie also einfach ein gutes altes HTML form POSTIEREN, sieht die Anfrage etwa so aus:

%Vor%

Aber wenn Sie viel mit Ajax arbeiten, beinhaltet dieses Problem auch den Austausch komplexerer Daten mit Typen (string, int, bool) und Strukturen (Arrays, Objekte). JSON ist daher in den meisten Fällen die beste Wahl. Aber eine Anfrage mit einer JSON-Nutzlast würde in etwa so aussehen:

%Vor%

Der Inhalt wäre nun application/json (oder zumindest keiner der oben genannten), daher weiß PHPs $_POST -wrapper (noch) nicht, wie er damit umgehen soll.

Die Daten sind immer noch da, Sie können einfach nicht über den Wrapper darauf zugreifen. Sie müssen es also im rohen Format mit file_get_contents('php://input') () selbst abholen Es ist nicht multipart/form-data -coded ).

Auf diese Weise würden Sie auch auf XML-Daten oder einen anderen nicht standardmäßigen Inhaltstyp zugreifen.

    
Quasdunk 17.01.2012, 11:23
quelle
29
___ qstntxt ___

Ich wurde angewiesen, die Methode php://input anstelle von $_POST zu verwenden, wenn ich mit Ajax-Anfragen von JQuery interagiere. Was ich nicht verstehe, sind die Vorteile der Verwendung dieser Methode gegenüber der globalen Methode application/x-www-form-urlencoded oder %code% .

    
___ answer8893792 ___

Der Grund ist, dass %code% unabhängig vom Inhaltstyp alle Rohdaten nach den HTTP-Headern der Anfrage zurückgibt.

Die PHP superglobal %code% , nur soll Daten umhüllen, die entweder

sind
  • %code% (Standard-Inhaltstyp für einfache Formular-Posts) oder
  • %code% (wird hauptsächlich für Datei-Uploads verwendet)

Dies liegt daran, dass dies die einzigen Inhaltstypen sind, die müssen wird von Benutzeragenten unterstützt . Daher erwarten der Server und PHP normalerweise keinen anderen Inhaltstyp (was nicht bedeutet, dass sie nicht können).

Wenn Sie also einfach ein gutes altes HTML %code% POSTIEREN, sieht die Anfrage etwa so aus:

%Vor%

Aber wenn Sie viel mit Ajax arbeiten, beinhaltet dieses Problem auch den Austausch komplexerer Daten mit Typen (string, int, bool) und Strukturen (Arrays, Objekte). JSON ist daher in den meisten Fällen die beste Wahl. Aber eine Anfrage mit einer JSON-Nutzlast würde in etwa so aussehen:

%Vor%

Der Inhalt wäre nun %code% (oder zumindest keiner der oben genannten), daher weiß PHPs %code% -wrapper (noch) nicht, wie er damit umgehen soll.

Die Daten sind immer noch da, Sie können einfach nicht über den Wrapper darauf zugreifen. Sie müssen es also im rohen Format mit %code% () selbst abholen Es ist nicht %code% -coded ).

Auf diese Weise würden Sie auch auf XML-Daten oder einen anderen nicht standardmäßigen Inhaltstyp zugreifen.

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ tag123input ___ Die Eingabe bezieht sich normalerweise auf die Benutzereingabe, d. h. auf die Daten, die der Benutzer an eine laufende Anwendung liefert. In vielen Systemen wird diese Eingabe als potenziell gefährlich angesehen und muss bereinigt werden, um sicherzustellen, dass der Benutzer keinen ausführbaren Code in die Anwendung injiziert hat. ___ tag123ajax ___ AJAX (Asynchrones JavaScript und XML) ist eine Technik zum Erstellen nahtloser interaktiver Websites über den asynchronen Datenaustausch zwischen Client und Server. AJAX erleichtert die Kommunikation mit dem Server oder partielle Seitenaktualisierungen ohne eine herkömmliche Seitenaktualisierung. ___ answer8893770 ___

Wenn Post-Daten fehlerhaft sind, enthält $ _POST nichts. Php: // input wird jedoch die fehlerhafte Zeichenfolge haben.

Zum Beispiel gibt es einige Ajax-Anwendungen, die keine korrekte post-key-value-Sequenz zum Hochladen einer Datei bilden und nur die gesamte Datei als Post-Daten ausgeben, ohne Variablennamen oder irgendetwas. $ _POST ist leer, $ _FILES ebenfalls leer, und php: // input enthält eine exakte Datei, die als String geschrieben ist.

    
___ qstnhdr ___ PHP "php: // Eingabe" vs $ _POST ___ answer8993758 ___

%code% kann Ihnen die rohen Bytes der Daten geben. Dies ist nützlich, wenn die POST-Daten eine JSON-codierte Struktur sind, was häufig bei einer AJAX POST-Anfrage der Fall ist.

Hier ist eine Funktion, die genau das macht:

%Vor%

Das Array %code% ist sinnvoller, wenn Sie Schlüsselwertdaten aus einem Formular bearbeiten, das von einem herkömmlichen POST übergeben wurde. Dies funktioniert nur, wenn die POST-Daten in einem anerkannten Format sind, normalerweise %code% (siehe Ссылка für Details).

    
___
Rob Agar 17.01.2012 11:21
quelle
19

Wenn Post-Daten fehlerhaft sind, enthält $ _POST nichts. Php: // input wird jedoch die fehlerhafte Zeichenfolge haben.

Zum Beispiel gibt es einige Ajax-Anwendungen, die keine korrekte post-key-value-Sequenz zum Hochladen einer Datei bilden und nur die gesamte Datei als Post-Daten ausgeben, ohne Variablennamen oder irgendetwas. $ _POST ist leer, $ _FILES ebenfalls leer, und php: // input enthält eine exakte Datei, die als String geschrieben ist.

    
Nameless 17.01.2012 11:22
quelle

Tags und Links