>백엔드 개발 >PHP 문제 >php://input과 $_post의 차이점은 무엇입니까?

php://input과 $_post의 차이점은 무엇입니까?

青灯夜游
青灯夜游원래의
2020-04-25 16:47:402579검색

php://input과 $_post의 차이점은 무엇인가요? 다음 기사에서는 이를 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

php://input과 $_post의 차이점은 무엇입니까?

설명서에서 가져온 몇 가지 문장:

  1. HTTP POST 요청의 Content-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

출력:

으아악

요약: enctype="application/x-www-form-urlencoded"일 때 요청 본문의 데이터(name=saisai&submit=submit)를 연관 배열로 변환하여 $_POST에 넣고 php:// 입력을 얻습니다. 원시 데이터.

2. enctype="multipart/form-data"일 때

2.1 양식:

----------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)

요청 제목:

    <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--

요약: enctype="multipart/form-data"일 때 업로드 파일 제어가 없으면 $_POST는 정상적으로 데이터를 인쇄할 수 있지만 php://는 유효하지 않습니다.

2.2 양식(파일 업로드 추가):

----------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)

요청 제목:

<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--

요약: enctype="multipart/form-data"이고 업로드 파일 컨트롤이 있는 경우 $_POST에서 인쇄할 수 있습니다. 출력 입력 데이터이지만 업로드된 콘텐츠는 제외됩니다. php://가 유효하지 않습니다.

3. enctype="text/plain"

양식:

----------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)

요청 본문:

<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

요약: enctype="text/plain"인 경우 $_POST에 콘텐츠가 없습니다. php: //입력은 키-값 쌍으로 저장됩니다.

요약:

  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 중국어 홈페이지를 주목해주세요! !

위 내용은 php://input과 $_post의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.