通常、ユーザーはブラウザの Web フォームを使用してサーバーにデータを投稿します。当社は PHP を使用して、ユーザーがサーバーに投稿したデータを受信し、適切に処理します。しかし、場合によっては、ユーザーがクライアント ソフトウェアを使用してサーバー PHP プログラムにポスト データを送信し、それを識別するために $_POST を使用できない場合は、どのように処理すべきでしょうか?データを受信する
$_POSTメソッド
$_POSTメソッドは、HTTP POSTメソッドを通じて渡される変数の配列であり、自動グローバル変数です。たとえば、$_POST['name'] を使用すると、Web フォームおよび Web ページから投稿されたデータを非同期で受信できます。つまり、$_POST は、ドキュメント タイプ Content-Type: application/x-www で送信されたデータのみを受信できます。 -フォーム-URLコード化。
$GLOBALS['HTTP_RAW_POST_DATA'] メソッドでデータを受信します
ポストで送信されたデータが text/xml や SOAP などの PHP が認識できるドキュメントタイプではない場合は、$GLOBALS[' を使用できますHTTP_RAW_POST_DATA'] が引き継ぎます。 $HTTP_RAW_POST_DATA 変数には、生の POST データが含まれています。この変数は、認識できない MIME タイプのデータが検出された場合にのみ生成されます。 $HTTP_RAW_POST_DATA は、enctype="multipart/form-data" フォーム データでは使用できません。つまり、$HTTP_RAW_POST_DATA を使用すると、Web フォームから投稿されたデータを受け取ることができません。
データを受信するための php://input メソッド
元の POST データにアクセスするより良い方法は php://input です。 php://input を使用すると、POST の生データを読み取ることができます。 $HTTP_RAW_POST_DATA よりもメモリへの負担が少なく、特別な php.ini 設定は必要ありませんが、php://input は enctype="multipart/form-data" では使用できません。
たとえば、ユーザーはクライアント アプリケーションを使用してファイルをサーバーに投稿します。ファイルの内容は気にしませんが、ファイルを完全にサーバーに保存したいとします。次のコードを使用できます。 :
$input = file_get_contents('php://input'); file_put_contents($original, $input); //$original为服务器上的文件
上記のコードは、file_get_contents('php://input') を使用して投稿データを受信し、そのデータを $original ファイルに書き込みます。クライアントからサーバーまで、このようなアプリケーションは数多くあります。特に、PHP 開発が C、C++、その他のアプリケーション開発と共同で製品を開発する必要がある場合に使用されます。
以下は、$_POST、$GLOBALS['HTTP_RAW_POST_DATA']、および php://input を使用して POST データ処理を受信する 3 つの異なる方法を示す小さな例です。 post.php
<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>