关于php:PHP接收不到json格式的数据用-filegetcontentsphpinput-试试

37次阅读

共计 843 个字符,预计需要花费 3 分钟才能阅读完成。

通常状况,PHP 获取上游传来的参数,即内部变量,应用 $_POST、$_GET、$_REQUEST 就能够了。

其中,$_REQUEST 是个组合体,默认状况蕴含了 $_GET,$_POST 和 $_COOKIE。

GET 形式咱们晓得,通过 URL 传递参数(又叫 query string),只有你的 URL 带有 query string 就没啥问题;

POST 形式就有点简单了,$_POST 中获取变量的前提是,发动申请的 Content-Type 必须得是 application/x-www-form-urlencoded 或 multipart/form-data 格局;

因为个别用 PHP 解决的是网页申请,下面这两种格局都是默认的,所以没啥问题;
而一旦用 PHP 给第三方提供接口时,就会遇到另一种状况:
第三方应用的 Content-Type 不是下面提到的两种

纯接口罕用的个别是 application/json 格局,当然还有 text/xml、text/plain、stream 等其余类型;
这个状况用 $_GET(或者 $_REQUEST) 只能获取第三方写在 URL 中的参数 (该数组不仅仅对 GET 申请失效,所有带 query string 的申请都能够),而 json 格局的参数,就无能为力了。

这就要用到 file_get_contents('php://input') 了;
php://input 容许读取【申请方】的原始数据, 实用于大多数类型的 Content-type,不止是下面提到的几种,但不能用于 multipart/form-data 类型。
也就是说,当 Content-Type 为 application/x-www-data-urlencoded 时,php://input 获取的数据,和 $_POST 获取的数据统一。

言而总之:

  • 如果用 $_POST、$_GET、$_REQUEST 获取不到参数时,能够用 php://input 打印一下原始数据瞅瞅;
  • 如果和 第三方 对接接口,尽量用 file_get_contents('php://input') 比拟稳当;

正文完
 0