Heim  >  Artikel  >  Backend-Entwicklung  >  说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别

说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别

WBOY
WBOYOriginal
2016-06-20 12:49:12850Durchsuche

$POST

$_POST是我们最常用的获取POST数据的方式,它是以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换,识别的数据类型是PHP默认识别的数据类型 application/x-www.form-urlencoded

  • 无法解析如text/xml,application/json等非 application/x-www.form-urlencoded 数据类型的内容

HTTP_RAW_POST_DATA

前面说过PHP默认识别的数据类型是application/x-www.form-urlencoded,用Content-Type=application/json 类型,提交的POST数据这时候 $_POST 就无法获取到了,但是使用 $GLOBALS['HTTP_RAW_POST_DATA'] 可以获取到。因为在PHP无法识别Content-Type的时候,就会把 POST 数据填入到 $HTTP_RAW_POST_DATA 中。

  • 需要设置 php.ini 中的 always_populate_raw_post_data 值为 On 才会生效

  • 当$_POST 与 php://input可以取到值时 $HTTP_RAW_POST_DATA 为空

  • 不能用于 enctype="multipart/form-data"

  • PHP7中已经移除了这个全局变量,用 php://input 替代

php://input

php://input 可通过输入流以文件读取方式取得未经处理的POST原始数据,允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小。

  • 不需要任何特殊的 php.ini 设置

  • 不能用于 enctype="multipart/form-data"

小结

上面了介绍了一下我们目前使用PHP获取POST数据的三种方式,当我们以后使用PHP来获取POST数据的时候用$_POST或者php://input就好了。虽然HTTP_RAW_POST_DATA可以达到和php://input一样的目的,但是会给内存带来较大的压力,官方也注意到了这个问题,所以在PHP7就果断移除了这个不好用的东东。。。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn