ホームページ  >  記事  >  バックエンド開発  >  $_POST、$HTTP_RAW_POST_DATA、php://input の違い

$_POST、$HTTP_RAW_POST_DATA、php://input の違い

WBOY
WBOYオリジナル
2016-06-20 13:02:221032ブラウズ

$_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']));


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。