PHP 中获取 POST 数据的方式

form-data x-www-form-urlencoded raw
$_POST 推荐 推荐 无效
$GLOBALS[‘HTTP_RAW_POST_DATA’] 无效 无效 有效
php://input 无效 有效 推荐

$_POST 方式

通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。

Coentent-Type 仅在取值为 application/x-www-data-urlencoded 或 multipart/form-data 两种情况下,PHP才会将 HTTP 请求数据包中相应的数据填入全局变量 $_POST。

$GLOBALS[‘HTTP_RAW_POST_DATA’] 方式

此变量仅在碰到未识别 MIME 类型的数据时产生。

PHP 默认识别的数据类型是 application/x-www.form-urlencoded 标准的数据类型。如果 POST 过来的数据不是 PHP 能够识别的,比如 text/xml 或者 soap 等可以用 $GLOBALS[‘HTTP_RAW_POST_DATA’]方式来接收。

不过,访问原始 POST 数据的更好方法是 php://input。

php://input 方式

php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。

php://input 不能用于 enctype=“multipart/form-data”。

参考 & 扩展阅读