php://input と $_post の違いは何ですか?次の記事で紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
マニュアルから抜粋したいくつかの文:
HTTP POST リクエストのとき コンテンツのとき-Type が application/x-www-form-urlencoded または multipart/form-data の場合、変数は連想配列の形式で現在のスクリプトに渡されます。
php://input は、要求された生データへのアクセスを提供する読み取り専用ストリームです。 enctype="multipart/form-data"を使用した場合、php://inputは無効となります。
確認:
post.html
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <form action="getpost.php" method="post"> <input type="text" name="name" value="saisai"> <input type="submit" name="submit" value="submit"> </form> </body> </html>
getpost.php
<?php echo "----------input--------<br />"; var_dump(file_get_contents('php://input', 'r')); echo "----------post---------<br />"; var_dump($_POST); ?>
1. enctype = "application/x-www-form-urlencoded"
リクエスト本文:
Content-Type: application/x-www-form-urlencoded Content-Length: 25name=saisai&submit=submit
出力:
----------input-------- string 'name=saisai&submit=submit' (length=25) ----------post--------- array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
概要: enctype="application/x- www の場合-form-urlencoded」ではリクエストボディのデータ(name=saisai&submit=submit)を連想配列に変換して$_POSTに入れますが、php://inputは元のデータ(生データ)を取得します。
2. enctype="multipart/form-data"
2.1 の場合 フォーム:
<form action="getpost.php" method="post" enctype="multipart/form-data"> <input type="text" name="name" value="saisai"> <input type="submit" name="submit" value="submit"> </form>
リクエストの件名:
Content-Type: multipart/form-data; boundary=---------------------------22554656810024 Content-Length: 249 -----------------------------22554656810024 Content-Disposition: form-data; name="name" saisai -----------------------------22554656810024 Content-Disposition: form-data; name="submit" submit -----------------------------22554656810024--
出力:
----------input-------- string '' (length=0) ----------post--------- array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
概要: enctype="multipart/form-data" でアップロード ファイル コントロールがない場合、$_POST は通常どおりデータを出力できますが、php:// は無効です。
2.2 フォーム (ファイルのアップロードを追加):
<form action="getpost.php" method="post" enctype="multipart/form-data"> <input type="text" name="name" value="saisai"> <input type="submit" name="submit" value="submit"> </form>
リクエストの件名:
Content-Type: multipart/form-data; boundary=---------------------------272321281228527 Content-Length: 68386 -----------------------------272321281228527 Content-Disposition: form-data; name="name" saisai -----------------------------272321281228527 Content-Disposition: form-data; name="filename"; filename="dog.png" Content-Type: image/png 一堆乱码 -----------------------------272321281228527 Content-Disposition: form-data; name="submit" submit -----------------------------272321281228527--
出力:
----------input-------- string '' (length=0) ----------post--------- array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
概要: enctype="multipart/form" -data" とアップロード ファイル コントロールがあり、$_POST は受信データを出力できますが、アップロードされたコンテンツは除外されます。 php:// は無効です。
3. enctype="text/plain"
フォーム:
<form action="getpost.php" method="post" enctype="text/plain"> <input type="text" name="name" value="saisai"> <input type="submit" name="submit" value="submit"> </form>
リクエスト本文:
Content-Type: text/plain Content-Length: 28 name=saisai submit=submit
出力:
----------input-------- string 'name=saisai submit=submit ' (length=28) ----------post--------- array (size=0) empty
概要: enctype="text/plain" の場合、$_POST にはコンテンツはなく、php://input のキーと値のペアに格納されます。
概要:
HTTP POST リクエストの Content-Type が application/x-www-form-urlencoded または multipart/form の場合-data : php://input には、a=1&b=2 のような元のデータが含まれます。 $_POST には連想配列が含まれており、コントロールのコンテンツはアップロードされません。
php://input は、要求された生データへのアクセスを提供する読み取り専用ストリームです。 enctype="multipart/form-data"を使用した場合、php://inputは無効となります。
$_POST は、Content-Type = "text/plain" の場合、投稿データを取得できませんが、php://input では取得できます。
さらに関連する知識については、PHP 中国語 Web サイト に注目してください。 !
以上がphp://input と $_post の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。