$_POST、$HTTP_RAW_POST_DATA、php://input の違い
$HTTP_RAW_POST_DATA は常に生の POST データを含む変数を生成します。それ以外の場合、この変数は、認識できない MIME タイプのデータが検出された場合にのみ生成されます。ただし、生の POST データにアクセスするより良い方法は、php://input です。 $HTTP_RAW_POST_DATA は、enctype="multipart/form-data" フォーム データでは使用できません。
質問: $HTTP_RAW_POST_DATA == $_POST ですか? —>答えはノーです。
これが私の個人的な理解を要約したものです:
1: $POST は一般的に使用されるものなので、導入する必要はありません
2: $GLOBALS[‘HTTP_RAW_POST_DATA’]:
基本的に、$GLOBALS[‘HTTP_RAW_POST_DATA’] と $_POST は同じです。ただし、投稿されたデータが PHP によって認識されない場合は、$GLOBALS[‘HTTP_RAW_POST_DATA’] を使用して、text/xml や SOAP などのデータを受け取ることができます。
PHP によってデフォルトで認識されるデータ型は、application/x-www.form-urlencoded の標準データ型です。Content-Type=text/xml 型を使用して、XML ドキュメントのコンテンツを PHP サーバーに送信します。このPOSTデータを取得しますか?
PHP はデフォルトで application/x-www.form-urlencoded の標準データ型のみを認識するため、text/xml などのコンテンツは $_POST 配列に解析できず、プロトタイプが保持されて $GLOBALS[' に渡されます。 HTTP_RAW_POST_DATA '] を受信します。
3: php://input もこの関数を実装できます:
php://input を使用すると、POST の生データを読み取ることができます。 $HTTP_RAW_POST_DATA よりもメモリへの負担が少なく、特別な php.ini 設定は必要ありません。 php://input は enctype=”multipart/form-data” では使用できません。
例:
leyangjun.html
<form action="leyangjun.php" method="post"> <p>First name: <input type="text" name="fname" /></p> <p>Last name: <input type="text" name="lname" /></p> <input type="submit" value="Submit" /> </form>
leyangjun.php:
echo "<pre class="brush:php;toolbar:false">"; print_r($_POST); $data = file_get_contents('php://input'); //都要解下码 print_r(urldecode($data)); echo "<br>"; print_r(urldecode($GLOBALS['HTTP_RAW_POST_DATA']));