>  기사  >  백엔드 개발  >  php가 POST JSON 데이터를 가져옵니다.

php가 POST JSON 데이터를 가져옵니다.

巴扎黑
巴扎黑원래의
2016-11-24 13:39:091708검색

Ajax를 통해 PHP 프로그램에 데이터를 전달할 때 $_POST를 사용하여 데이터를 얻을 수 없다는 것을 알 수 있습니다. 그러나 게시물에 실제로 json 데이터가 있음을 Firebug에서 볼 수 있습니다.

print_r( file_get_contents("php://input"))을 사용하면 json 데이터를 얻을 수 있습니다

그럼 php://input은 무엇인가요?

PHP로:/ /input의 도입에 대해 PHP 공식 매뉴얼 문서에는 이를 명확하게 설명하는 단락이 있습니다.

   php://input을 사용하면 원시 POST 데이터를 읽을 수 있습니다. 이는 $HTTP_RAW_POST_DATA에 대한 메모리 집약적 대안이며 특별한 php.ini 지시문이 필요하지 않습니다. enctype에서는 사용할 수 없습니다. ="multipart/form-data".

번역하면 다음과 같습니다.

"php://input은 처리되지 않은 POST 데이터를 읽을 수 있습니다. $HTTP_RAW_POST_DATA에 비해 메모리에 대한 부담이 적고 특별한 php.ini 설정이 필요하지 않습니다. php://input은 enctype=multipart/form-data"에 사용할 수 없습니다.

 1. Content-Type 값이 application/x-www-form-urlencoded인 경우 php는 해당 데이터를 요청합니다. http 요청 본문 $_POST 배열에 채워지고 $_POST 배열에 채워진 데이터는 urldecode() 구문 분석의 결과입니다(사실 Content-Type 외에도 multipart/form- 데이터가 폼 데이터임을 나타내는 데이터는 나중에 소개합니다.)

2. Content-Type이 multipart/form-data가 아닌 경우 php://input 데이터(이 조건은 나중에 소개됩니다.) ), php: //입력 데이터 및 http 엔터티 본문. 데이터의 일부가 일치합니다. 이 부분의 길이는 Content-Length에 의해 지정됩니다. 3. Content-Type이 application/x-www인 경우에만 해당됩니다. -form-urlencoded이고 제출 방법은 POST 방식입니다. $_POST 데이터와 php://input 데이터는 "일관적"입니다(인용 부호는 해당 형식이 일관되지 않고 내용이 일관됨을 나타냅니다). > 4. php://input $_GET 데이터를 읽을 수 없습니다. 이는 $_GET 데이터가 http 요청의 본문 부분이 아닌 http 요청 헤더(헤더)의 PATH 필드에 기록되기 때문입니다. 🎜>
당신은 이미 php://input에 대해 깊이 이해하고 있다고 생각합니다. 그렇다면 $http_raw_post_data는 무엇입니까? $http_raw_post_data는 PHP에서 Content-Type을 인식할 수 없을 때 사용됩니다. POST 데이터는 $http_raw_post_data 변수에 그대로 채워집니다. 또한 Content-Type multipart/form-data를 사용하여 POST 데이터를 읽을 수 없습니다. PHP가 항상 채우도록 하려면 php.ini의 Always_populate_raw_post_data 값을 On으로 설정해야 합니다. POST 데이터에 $http_raw_post_data 변수를 입력합니다.

연구 참고 1. PHP는 Coentent-Type 값이 application/x-www-data-urlencoded 및 multipart/form-인 경우에만 http에서 데이터를 요청합니다. data. 패키지의 해당 데이터는 전역 변수 $_POST

에 채워집니다. 2. PHP가 Content-Type 유형을 인식하지 못하는 경우 http 요청 패키지의 해당 데이터는 $ 변수에 채워집니다. HTTP_RAW_POST_DATA

3. Coentent-Type이 multipart/form-data가 아닌 경우에만 PHP는 http 요청 패킷의 해당 데이터를 php://input에 채우지 않습니다. 그렇지 않으면 다른 항목에서도 동일합니다. 상황. Coentent-Length로 지정된 패딩 길이입니다.


4. Content-Type이 application/x-www-data-urlencoded인 경우에만 php://input 데이터가 $_POST 데이터와 일치합니다.

5. php://input 데이터는 항상 $HTTP_RAW_POST_DATA와 동일하지만 php://input은 $HTTP_RAW_POST_DATA보다 효율적이며 php.ini에 대한 특별한 설정이 필요하지 않습니다.

6. PHP는 PATH 필드의 query_path 부분을 전역 변수 $_GET에 채웁니다. 일반적으로 GET 메소드로 제출된 http 요청의 본문은 비어 있습니다.



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