共计 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')
比拟稳当;