PHP 에서 POST 데 이 터 를 가 져 오 는 몇 가지 방법 을 모 았 습 니 다.

1.PHP 에서 POST 데 이 터 를 얻 는 몇 가지 방법
방법 1、가장 흔 한 방법 은:$POST['fieldname'];
설명:Content-Type:application/x-www-form-urlencoded 가 제출 한 데이터 만 받 을 수 있 습 니 다.
양식 POST 에서 나 온 데이터
방법 2、fileget_contents("php://input");
설명:
POST 의 원본 데 이 터 를 읽 을 수 있 도록 합 니 다.
와$HTTPRAW_POST_DATA 에 비해 메모리 에 주 는 압력 이 적 고 특별한 pp.ini 설정 이 필요 하지 않 습 니 다.
php://input enctype="multipart/form-data"에 사용 할 수 없습니다.
설명:
Content-Type 이 지정 되 지 않 은 POST 데이터 에 대해 서 는 file 을 사용 할 수 있 습 니 다.get_contents(“php://input”);원본 데 이 터 를 가 져 옵 니 다.
사실 POST 의 모든 데 이 터 를 PHP 로 받 으 면 이 방법 을 사용 할 수 있 습 니 다.바 이 너 리 파일 흐름 을 포함 하여 Content-Type 을 고려 하지 않 아 도 됩 니 다.
그래서 방법 둘 째 는 가장 안전 한 방법 입 니 다.
방법 3、$GLOBALS['HTTPRAW_POST_DATA'];
설명:
항상$HTTP 생 성RAW_POST_DATA  변 수 는 원본 POST 데 이 터 를 포함 합 니 다.
이 변 수 는 MIME 형식의 데 이 터 를 인식 하지 못 할 때 만 발생 합 니 다.
$HTTP_RAW_POST_DATA  enctype="multipart/form-data"  폼 데이터 사용 불가
post 에서 온 데이터 가 PHP 로 인식 되 지 않 는 다 면$GLOBALS[HTTPRAW_POST_DATA]받 으 러 왔 습 니 다.
예 를 들 어 text/xml 또는 soap 등등.
설명:
$GLOBALS['HTTP_RAW_POST_DATA']POST 에서 온 원본 데 이 터 를 저장 합 니 다.
$_POST 또는$REQUEST 는 PHP 가 key=>value 형식 으로 포맷 된 데 이 터 를 저장 합 니 다.
하지만$GLOBALS['HTTPRAW_POST_DATA']에서 POST 를 저장 할 지 여 부 는 centent-Type 의 설정 에 달 려 있 습 니 다.즉,POST 데 이 터 는 Content-Type:application/x-ww-form-urlencoded 를 명시 해 야 POST 데 이 터 를$GLOBALS['HTTPRAW_POST_DATA']중
시연
1.PHP 는 POST 에서 온 XML 데 이 터 를 어떻게 얻 고 XML 데 이 터 를 분석 합 니까?
예 를 들 어 우리 가 위 챗 기업 번 호 를 개발 할 때 사용자 가 답장 한 데 이 터 를 어떻게 처리 합 니까?
문서:http://qydev.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%99%AE%E9%80%9A%E6%B6%88%E6%81%AF
먼저 문 서 를 찾 아 보면 알 수 있 습 니 다.개발 모드 를 사용 하면 사용자 가 응용 프로그램 에 답장 정 보 를 보 낼 때 위 챗 서버 에서 검 증 된 리 셋 URL 로 POST XML 데 이 터 를 보 냅 니 다.
이 URL 을http://www.xxx.com로 가정 합 니 다.
Http 요청 방식:POST
http://www.xxx.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS&timestamp=13500001234&nonce=123412323
POST 의 XML 내용 은:

<xml>
   <ToUserName><![CDATA[toUser]]></ToUserName>
   <FromUserName><![CDATA[fromUser]]></FromUserName>
   <CreateTime>1348831860</CreateTime>
   <MsgType><![CDATA[text]]></MsgType>
   <Content><![CDATA[this is a test]]></Content>
   <MsgId>1234567890123456</MsgId>
   <AgentID>1</AgentID>
</xml>
그럼 이 내용 을 어떻게 받 아 요?
이때 사용 가능:방법 2(fileget_contents("php://input"),방법 3($GLOBALS['HTTPRAW_POST_DATA'])
방법 2(fileget_contents("php://input")):

$input = file_get_contents("php://input"); // POST
$xml = simplexml_load_string($input); // POST simplexml
var_dump($xml);
방법 3($GLOBALS['HTTPRAW_POST_DATA'])

$input = $GLOBALS['HTTP_RAW_POST_DATA'];
libxml_disable_entity_loader(true);
$xml = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
var_dump($xml);

좋은 웹페이지 즐겨찾기