ホームページ  >  記事  >  バックエンド開発  >  php://input と $_post の違いは何ですか?

php://input と $_post の違いは何ですか?

青灯夜游
青灯夜游オリジナル
2020-04-25 16:47:402550ブラウズ

php://input と $_post の違いは何ですか?次の記事で紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

php://input と $_post の違いは何ですか?

マニュアルから抜粋したいくつかの文:

  1. HTTP POST リクエストのとき コンテンツのとき-Type が application/x-www-form-urlencoded または multipart/form-data の場合、変数は連想配列の形式で現在のスクリプトに渡されます。

  2. 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(&#39;php://input&#39;, &#39;r&#39;));
    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 &#39;name=saisai&submit=submit&#39; (length=25)

----------post---------

array (size=2)
  &#39;name&#39; => string &#39;saisai&#39; (length=6)
  &#39;submit&#39; => string &#39;submit&#39; (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 &#39;&#39; (length=0)

----------post---------

array (size=2)
  &#39;name&#39; => string &#39;saisai&#39; (length=6)
  &#39;submit&#39; => string &#39;submit&#39; (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 &#39;&#39; (length=0)

----------post---------

array (size=2)
  &#39;name&#39; => string &#39;saisai&#39; (length=6)
  &#39;submit&#39; => string &#39;submit&#39; (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 &#39;name=saisai

submit=submit

&#39; (length=28)

----------post---------

array (size=0)
  empty

概要: enctype="text/plain" の場合、$_POST にはコンテンツはなく、php://input のキーと値のペアに格納されます。

概要:

  1. HTTP POST リクエストの Content-Type が application/x-www-form-urlencoded または multipart/form の場合-data : php://input には、a=1&b=2 のような元のデータが含まれます。 $_POST には連想配列が含まれており、コントロールのコンテンツはアップロードされません。

  2. php://input は、要求された生データへのアクセスを提供する読み取り専用ストリームです。 enctype="multipart/form-data"を使用した場合、php://inputは無効となります。

  3. $_POST は、Content-Type = "text/plain" の場合、投稿データを取得できませんが、php://input では取得できます。

さらに関連する知識については、PHP 中国語 Web サイト に注目してください。 !

以上がphp://input と $_post の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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