HTTP 常见 Content-Type
> application/x-www-form-urlencoded
> multipart/form-data
> application/json
$_POST 默认只能接收到 Content-Type: application/x-www-form-urlencoded 的数据
如果Content-Type: application/json 需要用到php://input 处理输入流
> 请求内容 {"account": "123456"}
> $tmpData = strval(file_get_contents("php://input"));
> $DataArray = json_decode($tmpData, true);
> $account = $DataArray['account'];
Content-Type: multipart/form-data
> $tmpData = strval(file_get_contents("php://input"));
> public function parseData($data) {
> $list = explode("\r\n", $data);
> foreach($list as $value) {
> if($value) {
> if(strstr($value, '--')) continue;
> if(strpos($value, '-')) {
> $key = str_replace('"', '', strchr($value, '"'));
> continue;
> };
> if($value) {
> $array[$key] = $value;
> }
> }
> }
> return $array;
> }
> $DataArray = $this->parseData($tmpData);
> $DataArray['account'];
百度知道
方法1、最常见的方法是:$_POST[‘fieldname’];
说明:只能接收Content-Type: application/x-www-form-urlencoded提交的数据
解释:也就是表单POST过来的数据
方法2、file_get_contents(“php://input”);
说明:
允许读取 POST 的原始数据。
和
H
T
T
P
R
A
W
P
O
S
T
D
A
T
A
比
起
来
,
它
给
内
存
带
来
的
压
力
较
小
,
并
且
不
需
要
任
何
特
殊
的
p
h
p
.
i
n
i
设
置
。
p
h
p
:
/
/
i
n
p
u
t
不
能
用
于
e
n
c
t
y
p
e
=
"
m
u
l
t
i
p
a
r
t
/
f
o
r
m
−
d
a
t
a
"
。
解
释
:
对
于
未
指
定
C
o
n
t
e
n
t
−
T
y
p
e
的
P
O
S
T
数
据
,
则
可
以
使
用
f
i
l
e
g
e
t
c
o
n
t
e
n
t
s
(
“
p
h
p
:
/
/
i
n
p
u
t
”
)
;
来
获
取
原
始
数
据
。
事
实
上
,
用
P
H
P
接
收
P
O
S
T
的
任
何
数
据
都
可
以
使
用
本
方
法
。
而
不
用
考
虑
C
o
n
t
e
n
t
−
T
y
p
e
,
包
括
二
进
制
文
件
流
也
可
以
。
所
以
用
方
法
二
是
最
保
险
的
方
法
方
法
3
、
HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。 php://input 不能用于 enctype="multipart/form-data"。 解释: 对于未指定 Content-Type 的POST数据,则可以使用file_get_contents(“php://input”);来获取原始数据。 事实上,用PHP接收POST的任何数据都可以使用本方法。而不用考虑Content-Type,包括二进制文件流也可以。 所以用方法二是最保险的方法 方法3、
HTTPRAWPOSTDATA比起来,它给内存带来的压力较小,并且不需要任何特殊的php.ini设置。php://input不能用于enctype="multipart/form−data"。解释:对于未指定Content−Type的POST数据,则可以使用filegetcontents(“php://input”);来获取原始数据。事实上,用PHP接收POST的任何数据都可以使用本方法。而不用考虑Content−Type,包括二进制文件流也可以。所以用方法二是最保险的方法方法3、GLOBALS[‘HTTP_RAW_POST_DATA’];
说明:
总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。
此变量仅在碰到未识别 MIME 类型的数据时产生。
$HTTP_RAW_POST_DATA 对于 enctype=“multipart/form-data” 表单数据不可用
如果post过来的数据不是PHP能够识别的,可以用 $GLOBALS[‘HTTP_RAW_POST_DATA’]来接收,
比如 text/xml 或者 soap 等等
解释:
$GLOBALS[‘HTTP_RAW_POST_DATA’]存放的是POST过来的原始数据。
P
O
S
T
或
_POST或
POST或_REQUEST存放的是 PHP以key=>value的形式格式化以后的数据。
但$GLOBALS[‘HTTP_RAW_POST_DATA’]中是否保存POST过来的数据取决于centent-Type的设置,即POST数据时 必须显式示指明Content-Type: application/x-www-form-urlencoded,POST的数据才会存放到 $GLOBALS[‘HTTP_RAW_POST_DATA’]中