복붙노트

PHP는 "PHP는 : / / 입력"대 $ _POST

PHP

PHP는 "PHP는 : / / 입력"대 $ _POST

JQuery에서 Ajax 요청과 상호 작용할 때 $ _POST 대신 php : // 입력 방법을 사용하도록 지시 받았다. 필자가 이해할 수없는 것은 $ _POST 또는 $ _GET의 전역 메소드를 사용하는 것의 이점입니다.

해결법

  1. ==============================

    1.이유는 php : // input이 내용 유형에 관계없이 요청의 HTTP 헤더 뒤에 모든 원시 데이터를 반환하기 때문입니다.

    이유는 php : // input이 내용 유형에 관계없이 요청의 HTTP 헤더 뒤에 모든 원시 데이터를 반환하기 때문입니다.

    PHP superglobal $ _POST는 오직 다음 중 하나 인 데이터를 랩핑한다고 가정합니다.

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

    따라서 단순히 오래된 HTML 폼을 POST하면 요청은 다음과 같이 보입니다.

    POST /page.php HTTP/1.1
    
    key1=value1&key2=value2&key3=value3
    

    그러나 Ajax를 많이 사용하는 경우이 유형은 유형 (문자열, int, bool) 및 구조 (배열, 객체)와 더 복잡한 데이터를 교환하기도하므로 대부분의 경우 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-encoded가 아닌 한).

    이것은 또한 XML 데이터 또는 다른 비표준 컨텐트 유형에 액세스하는 방법이기도합니다.

  2. ==============================

    2.php : // input은 데이터의 원시 바이트를 줄 수 있습니다. POST 된 데이터가 AJAX POST 요청의 경우 인 JSON 인코딩 구조 인 경우 유용합니다.

    php : // input은 데이터의 원시 바이트를 줄 수 있습니다. POST 된 데이터가 AJAX POST 요청의 경우 인 JSON 인코딩 구조 인 경우 유용합니다.

    다음을 수행하는 함수가 있습니다.

      /**
       * 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 참조). 자세한 내용은

  3. ==============================

    3.게시물 데이터의 형식이 잘못되면 $ _POST에 아무 것도 포함되지 않습니다. 그러나 php : // 입력은 잘못된 형식의 문자열을가집니다.

    게시물 데이터의 형식이 잘못되면 $ _POST에 아무 것도 포함되지 않습니다. 그러나 php : // 입력은 잘못된 형식의 문자열을가집니다.

    예를 들어, 파일을 업로드하기위한 올바른 키 - 값 순서를 형성하지 않고, 모든 파일을 변수 이름이나 기타없이 게시물 데이터로 덤프하는 일부 아약스 애플리케이션이 있습니다. $ _POST는 비어 있고 $ _FILES도 비어 있으며 php : // 입력은 문자열로 쓰여진 정확한 파일을 포함합니다.

  4. from https://stackoverflow.com/questions/8893574/php-php-input-vs-post by cc-by-sa and MIT license