1. Several methods for PHP to obtain POST data
Method 1. The most common method is: $_POST['fieldname'];
Note: Only Content-Type: application/x-www-form- The data submitted by urlencoded
Explanation: It is the data from the form POST
Method 2, file_get_contents("php://input");
Explanation:
Allows reading the original data of POST.
Compared with $HTTP_RAW_POST_DATA, it puts less pressure on memory and does not require any special php.ini settings.
php://input cannot be used with enctype="multipart/form-data".
Explanation:
For POST data without specified Content-Type, you can use file_get_contents("php://input"); to obtain the original data.
In fact, this method can be used to receive any POST data using PHP. Regardless of Content-Type, including binary file streams is also acceptable.
So method 2 is the safest method
Method 3, $GLOBALS['HTTP_RAW_POST_DATA'];
Note:
Always generate $HTTP_RAW_POST_DATA variable containing the original POST data.
This variable is only generated when data of unrecognized MIME type is encountered.
$HTTP_RAW_POST_DATA is not available for enctype="multipart/form-data" form data
If the posted data is not recognized by PHP, you can use $GLOBALS['HTTP_RAW_POST_DATA'] to receive it,
such as text/xml or soap, etc.
Explanation:
$GLOBALS['HTTP_RAW_POST_DATA'] stores the original data from POST.
$_POST or $_REQUEST stores data formatted by PHP in the form of key=>value.
But whether the POST data is saved in $GLOBALS['HTTP_RAW_POST_DATA'] depends on the centent-Type setting, that is, when POSTing data, Content-Type must be explicitly specified: application/x-www-form-urlencoded, POST data will be stored in $GLOBALS['HTTP_RAW_POST_DATA']
2. Demonstration
1. How does PHP obtain the XML data from POST and parse the XML data
For example, when we develop WeChat enterprise accounts, how to handle user replies What about the data?
Document: 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
First check the documentation and you will know: After enabling the development mode, when the user replies to the application, the WeChat server will POST a string of XML data to the verified callback URL
Assume this URL For http://www.xxx.com
Http request method: POST
http://www.xxx.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323
The XML content of POST is:
<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>
So what? Accept this content eh?
You can use it at this time: Method 2 (file_get_contents("php://input")), Method 3 ($GLOBALS['HTTP_RAW_POST_DATA'])
Method 2 (file_get_contents("php://input")) :
$input = file_get_contents("php://input"); //接收POST数据 $xml = simplexml_load_string($input); //提取POST数据为simplexml对象 var_dump($xml);
Method 3 ($GLOBALS['HTTP_RAW_POST_DATA'])
$input = $GLOBALS['HTTP_RAW_POST_DATA']; libxml_disable_entity_loader(true); $xml = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA); var_dump($xml);
For more PHP methods to obtain POST data, please pay attention to the PHP Chinese website for related articles!