瀏覽器的請求方式主要是get和post,在這里主要講下獲取post參數的幾種常用方法。
最常見(jiàn)的方法是:
$_POST['paraname'];
$_POST是個(gè)數組,是post方法發(fā)送的變量名和變量值,
存放的是 PHP以key=>value的形式格式化以后的數據。
這是在進(jìn)行web開(kāi)法時(shí)最常用的方式,但此種方法有局限性,
只能接收Content-Type: application/x-www-form-urlencoded提交的數據,
我們必須通過(guò)一個(gè)表單(真實(shí)或模擬)來(lái)進(jìn)行提交。
但是此種方式在進(jìn)行接口(如給APP提供接口)開(kāi)發(fā)時(shí),就不是很方便了。
這個(gè)時(shí)候,使用:
file_get_contents(“php://input”);將會(huì )非常的便捷。
用PHP接收POST的任何數據都可以使用本方法。而不用考慮Content-Type。
注意:
也可以使用$HTTP_RAW_POST_DATA 來(lái)獲取數據,
但是使用file_get_contents(“php://input”)給內存帶來(lái)的壓力較小,并且不需要任何特殊的 php.ini 設置。
但是不能用于 enctype=“multipart/form-data”。
這樣的情況下$HTTP_RAW_POST_DATA默認沒(méi)有填充,
比激活
always_populate_raw_post_data
潛在需要更少的內存。
但$GLOBALS['HTTP_RAW_POST_DATA']中
是否保存POST過(guò)來(lái)的數據取決于centent-Type的設置,
即POST數據時(shí) 必須顯式示指明
Content-Type: application/x-www-form-urlencoded,
POST的數據才會(huì )存放到 $GLOBALS['HTTP_RAW_POST_DATA']中。
php://input是個(gè)可以訪(fǎng)問(wèn)請求的原始數據的只讀流。
在微信中傳遞的是xml格式的數據以發(fā)送xml格式數據為例:
//接收POST數據
$data = file_get_contents(“php://input”);
//提取POST數據為simplexml對象
$xml = simplexml_load_string($data);
var_dump($xml);
這樣一來(lái),解析數據將會(huì )變得簡(jiǎn)潔,方便。