IT story

PHP“php : // input”vs $ _POST

hot-time 2020. 4. 25. 09:56
반응형

PHP“php : // input”vs $ _POST


JQuery의 Ajax 요청과 상호 작용할 때 php://input대신 메소드를 사용하라는 지시를 $_POST받았습니다. 내가 이해하지 못하는 것은 이것을 사용하는 것 $_POST또는 의 전역 방법의 이점입니다 $_GET.


그 이유는 php://input컨텐츠 유형에 관계없이 요청의 HTTP 헤더 다음에 모든 원시 데이터 리턴하기 때문입니다 .

PHP superglobal 은 다음 중 하나 인 데이터 $_POST랩핑 해야 합니다.

  • application/x-www-form-urlencoded (간단한 양식 게시물의 표준 콘텐츠 유형) 또는
  • multipart/form-data-encoded (주로 파일 업로드에 사용됨)

이는 사용자 에이전트가 지원 해야하는 유일한 컨텐츠 유형이기 때문 입니다. 따라서 서버와 PHP는 전통적으로 다른 콘텐츠 유형을 기대하지 않습니다 (그렇지 않다는 의미는 아님).

따라서 좋은 오래된 HTML을 POST form하면 요청은 다음과 같습니다.

POST /page.php HTTP/1.1

key1=value1&key2=value2&key3=value3

그러나 Ajax를 많이 사용하는 경우이 probaby에는 유형 (문자열, 정수, 부울) 및 구조 (배열, 객체)로 더 복잡한 데이터를 교환하는 것이 포함되므로 대부분의 경우 JSON이 최선의 선택입니다. 그러나 JSON 페이로드가있는 요청은 다음과 같습니다.

POST /page.php HTTP/1.1

{"key1":"value1","key2":"value2","key3":"value3"}

내용은 이제 application/json(또는 위에서 언급 한 것 중 적어도 하나는 아니므로) PHP의 $_POST-wrapper는 (아직) 처리 방법을 모릅니다.

데이터는 여전히 존재하므로 래퍼를 통해 액세스 할 수 없습니다. 당신은 원시 형식으로 직접 가져올 필요가 그래서 file_get_contents('php://input')( 이 아니에요 한로 multipart/form-data인코딩 된 ).

XML 데이터 또는 기타 비표준 컨텐츠 유형에 액세스하는 방법도 있습니다.


php://input데이터의 원시 바이트를 제공 할 수 있습니다. POST 된 데이터가 JSON으로 인코딩 된 구조 인 경우 유용하며 종종 AJAX POST 요청의 경우에 유용합니다.

이를 수행하는 기능은 다음과 같습니다.

  /**
   * Returns the JSON encoded POST data, if any, as an object.
   * 
   * @return Object|null
   */
  private function retrieveJsonPostData()
  {
    // get the raw POST data
    $rawData = file_get_contents("php://input");

    // this returns null if not valid json
    return json_decode($rawData);
  }

$_POST배열은 기존 POST에서 제출 한 양식의 키-값 데이터를 처리 할 때 더 유용합니다. POST 된 데이터가 인식 가능한 형식 인 경우에만 작동합니다 application/x-www-form-urlencoded( 일반적으로 http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4 참조).


게시 데이터의 형식이 잘못된 경우 $ _POST에 아무것도 포함되지 않습니다. 그러나 php : // input에는 잘못된 문자열이 있습니다.

예를 들어 파일을 업로드하기위한 올바른 사후 키-값 시퀀스를 형성하지 않고 변수 이름이나 아무것도없이 모든 파일을 사후 데이터로 덤프하는 일부 ajax 애플리케이션이 있습니다. $ _POST는 비어 있고 $ _FILES도 비어 있으며 php : // input은 문자열로 작성된 정확한 파일을 포함합니다.


사용 방법의 간단한 예

 <?php  
     if(!isset($_POST) || empty($_POST)) { 
     ?> 
        <form name="form1" method="post" action=""> 
          <input type="text" name="textfield"><br /> 
          <input type="submit" name="Submit" value="submit"> 
        </form> 
   <?php  
        } else { 
        $example = file_get_contents("php://input");
        echo $example;  }  
   ?>

참고 URL : https://stackoverflow.com/questions/8893574/php-php-input-vs-post

반응형