Normalerweise verwenden Benutzer Browser-Webformulare, um Daten an den Server zu senden. Wir verwenden PHP, um die Daten, die Benutzer an den Server senden, zu empfangen und entsprechend zu verarbeiten. Aber in einigen Fällen, wenn der Benutzer Client-Software verwendet, um Postdaten an das PHP-Programm des Servers zu senden, und diese nicht mit $_POST identifizieren kann, wie sollte damit umgegangen werden?
Die Methode $_POST empfängt Daten
Die Methode $_POST ist ein Array von Variablen, die über die HTTP-Methode POST übergeben werden, und ist eine automatische globale Variable. Wenn Sie beispielsweise $_POST['name'] verwenden, können Sie von Webformularen und Webseiten gepostete Daten asynchron empfangen. Das heißt, $_POST kann nur Daten empfangen, die mit dem Dokumenttyp Content-Type: application/x-www übermittelt wurden -form-urlencoded.
$GLOBALS['HTTP_RAW_POST_DATA']-Methode zum Empfangen von Daten
Wenn es sich bei den per Post gesendeten Daten nicht um einen Dokumenttyp handelt, den PHP erkennen kann, z. B. Text/XML oder Soap, usw., wir können mit $GLOBALS['HTTP_RAW_POST_DATA'] empfangen werden. Die Variable $HTTP_RAW_POST_DATA enthält die POST-Rohdaten. Diese Variable wird nur generiert, wenn Daten unbekannter MIME-Typen gefunden werden. $HTTP_RAW_POST_DATA ist für enctype="multipart/form-data"-Formulardaten nicht verfügbar. Das heißt, mit $HTTP_RAW_POST_DATA können die vom Webformular geposteten Daten nicht empfangen werden.
Daten über php://input empfangen
Wenn der bessere Weg, auf die ursprünglichen POST-Daten zuzugreifen, php://input ist. php://input ermöglicht das Lesen der Rohdaten eines POST. Es belastet den Speicher weniger als $HTTP_RAW_POST_DATA und erfordert keine speziellen php.ini-Einstellungen, während php://input nicht mit enctype="multipart/form-data" verwendet werden kann.
Der Benutzer verwendet beispielsweise eine Clientanwendung, um eine Datei auf dem Server zu veröffentlichen. Der Inhalt der Datei ist uns egal, wir möchten die Datei jedoch vollständig auf dem Server speichern. Wir können den folgenden Code verwenden:
$input = file_get_contents('php://input'); file_put_contents($original, $input); //$original为服务器上的文件
Der obige Code verwendet file_get_contents('php://input'), um Beitragsdaten zu empfangen und dann zu schreiben Die Daten werden in die $original-Datei geschrieben. Tatsächlich kann es als Hochladen einer Datei vom Client auf den Server verstanden werden. Es gibt viele solcher Anwendungen, insbesondere wenn unsere PHP-Entwicklung Produkte mit C, C++ und anderen Anwendungsentwicklungen gemeinsam entwickeln muss .
Das Folgende ist ein kleines Beispiel, das drei verschiedene Arten des Empfangs der POST-Datenverarbeitung zeigt: $_POST, $GLOBALS['HTTP_RAW_POST_DATA'] und php://input:
a.html
<form name="demo_form" action="post.php" method="post"> <p><label>Name: </label><input type="text" class="input" name="name"></p> <p><label>Address: </label><input type="text" class="input" name="address"></p> <p><input type="submit" name="submit" class="btn" value="Submit"></p> </form>
post.php
header("Content-type:text/html;charset=utf-8"); echo '$_POST接收:<br/>'; print_r($_POST); echo '<hr/>'; echo '$GLOBALS[\'HTTP_RAW_POST_DATA\']接收:<br/>'; print_r($GLOBALS['HTTP_RAW_POST_DATA']); echo '<hr/>'; echo 'php://input接收:<br/>'; $data = file_get_contents('php://input'); print_r(urldecode($data));
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass jeder die drei Arten verstehen kann, wie PHP Post-Daten empfängt.
Weitere Artikel darüber, wie PHP POST-Daten empfängt, finden Sie auf der chinesischen PHP-Website!