框架thinkphp5
支付用插件EasyWeChat
微信异步回调时本应存放了一个xml的$_POST是空的,却能这样file_get_contents('php://input')获得xml。
框架thinkphp5
支付用插件EasyWeChat
微信异步回调时本应存放了一个xml的$_POST是空的,却能这样file_get_contents('php://input')获得xml。
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答578 阅读✓ 已解决
788 阅读
因为PHP默认只识别application/x-www.form-urlencoded标准的数据类型,
对text/xml的内容无法解析为$_POST数组,
所以只能用file_get_contents('php://input')获取原始数据流
文档

这个回答很棒了,我就基于次编辑一下做个补充,为什么不支持
$_POST
。首页 PHP 获取到的数据都在 php://input ,但是里面的收是原始数据(RAW)。
$_POST
本质上是提供了一个快捷获取通道,把原始数据给转成了数组,但是不是所有原始数据都会被转成数组形式的。目前支持的是
application/x-www-form-urlencoded
和multipart/form-data-encoded
。这两者是是必须被 client 支持的最基本的数据交互类型。所以 PHP 对他们做了支持,但并不代表 PHP 不能做到支持其他数据类型转换,只是投入产出不太合适(如果需求强烈可以去给官方组提需求或者自己实现一波?)。$xml 是一个
SimpleXMLElement
对象