简单认识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");