问题
第三方与 PHP 交互时,经常把 json 数据 post 给 PHP,但在 PHP里面 $_POST
中获取不到,$_REQUEST
也获取不到,但是通过网络请求可以看到确实是把JSON数据 POST 给了 PHP。
解决
- 想到以前微信的XML信息POST传给 PHP,然后使用
file_get_contents("php://input")
后正常获取到数据。 - 兼容性解决:
switch($_SERVER['REQUEST_METHOD'] ) {
case 'POST':
$input = file_get_contents("php://input");
if($temp_input = json_decode($input,true)){
$input = $temp_input;
}else {
$input = $_POST;//解决注意事项里的问题
}
print_r($input);// 这里测试下输出
break;
default:
$input = $_GET;
}
又可以愉快的使用了!可能还不够完善,欢迎指正!
XML数据类似
原因
PHP 默认只识别 application/x-www.form-urlencoded
标准的数据类型,因此,对text/xml
或者soap
或者 application/octet-stream
之类的内容无法解析,如果用 $_POST
数组来接收就会失败。
注意
php://input
允许读取 POST 的原始数据,但却不能用于enctype="multipart/form-data"
类型的提交。
参见:官方说明$HTTP_RAW_POST_DATA
等同于php://input
- 注:PHP 7 已经取消了
$HTTP_RAW_POST_DATA
,请用php://input
代替