簡單認識php://input、$_POST、$GLOBALS['HTTP_RAW_POST_DATA']三者的區別
php://input
- 從使用結果看,php://input與$GLOBALS[‘HTTP_RAW_POST_DATA’]的功能是一樣的,但是,php://input需要的內存比較小,並且它不受 php.ini 配置文件的限制。
- 如果Coentent-Type的類型爲multipart/form-data,使用php://input和$GLOBALS[‘HTTP_RAW_POST_DATA’]是獲取不到數據的,除此之外,php://input都能獲取到數據。
- 僅當Coentent-Type的類型爲application/x-www.form-urlencoded時,使用php://input和$_POST獲取到的數據纔是一致的。
- 使用方式:使用file_get_contents(‘php://input’)獲取請求數據。
$_POST
只有Coentent-Type的值爲application/x-www.form-urlencoded和multipart/form-data兩種類型時,$_POST才能獲取到數據
$GLOBALS[‘HTTP_RAW_POST_DATA’]
如果php無法識別Coentent-Type類型,也就無法獲取請求數據,這個時候,可以用$GLOBALS[‘HTTP_RAW_POST_DATA’]來獲取
多種方案
$xml = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input");