Vergleichen Sie die Unterschiede zwischen den Übermittlungsmethoden form POST und fsockopen.
Wenn das Formular im POST-Modus gesendet wird,
können $_POST und php://input den Wert abrufen und $HTTP_RAW_POST_DATA ist leer.
$_POST organisiert die übermittelten Daten in einem assoziativen Array und führt eine Kodierungsverarbeitung wie URL-Dekodierung und sogar eine Kodierungskonvertierung durch.
php://input kann unverarbeitete POST-Rohdaten erhalten, indem Dateien über den Eingabestream gelesen werden.
php://input ermöglicht das Lesen der Rohdaten von POST. Es belastet den Speicher weniger als $HTTP_RAW_POST_DATA und erfordert keine speziellen php.ini-Einstellungen. php://input kann nicht mit enctype="multipart/form-data" verwendet werden.
Beispiel für die Übermittlung von POST-Daten durch fsockopen:
$sock = fsockopen("localhost", 80, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)n");
$data = "txt=" . urlencode("中") .&bar=" urlencode("Value for Bar");
fwrite($sock, "POST /posttest/response.php HTTP/1.0rn");
fwrite($sock, "Host: localhostrn");
fwrite($sock, "Content-type: application/x-www-form-urlencodedrn");
fwrite($sock, "Content-length: " . strlen($data). "rn");
fwrite($sock, "Akzeptieren: */*rn");
fwrite($sock, "rn");
fwrite($sock, "$datarn");
fwrite($sock, "rn");
$headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$strn";
echo "n";
$body = "";
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
echo $body;
stimmt mit dem Ergebnis von (1) überein
:
1. Verwenden Sie php://input, um die ursprünglichen POST-Daten einfach abzurufen.
2. $HTTP_RAW_POST_DATA ist nur gültig, wenn der Content-Type-Typ von POST nicht von PHP erkannt wird.
POST-Daten, die normalerweise über Seitenformulare übermittelt werden, können beispielsweise nicht übergeben werden über $ HTTP_RAW_POST_DATA extrahiert wird. Sein Codierungstypattribut (enctype-Attribut) ist application/x-www-form-urlencoded, multipart/form-data.
Hinweis: Auch wenn Sie das enctype-Attribut auf der Seite explizit in einen Typ ändern, der von PHP nicht erkannt wird, ist es dennoch ungültig.
Da das Codierungsattribut für die Formularübermittlung formularbegrenzt ist, werden nicht erkennbare Typen als in der Standardcodierung (d. h. application/x-www-form-urlencoded) übermittelt betrachtet.
3. $_POST nur, wenn sich die Daten in application/x-www befinden Der Typ -form-urlencoded kann nur beim Absenden abgerufen werden.