$_POST,file_get_contents("php://input") 与 $GLOBALS["HTTP_RAW_POST_DATA"] 之间的区别

(1):HTTP中的POST方式传递的数据类型是多种多样的,比如说text/xml,soap等等

(2):PHP默认情况下只能识别application/x-www.form-urlencoded数据类型(标准数据类型),对于这种数据类型的数据,直接通过$_POST系统函数就可以获取的到。但是对于不满足上述数据类型的数据,使用$_POST是获取不到的。

(3):PHP获取非application/x-www.form-urlencoded数据类型的数据的时候,需要通过php提供的$GLOBALS[‘HTTP_RAW_POST_DATA’]或者file_get_contents(“php://input”)的方式进行获取(这两种获取数据的方式只能获取非标准数据类型的数据,并不能获取标准数据类型的数据)

(4):file_get_contents(“php://input”)与$GLOBALS[‘HTTP_RAW_POST_DATA’]获取到的数据其实是一样的,两者之间的区别在与$GLOBALS[‘HTTP_RAW_POST_DATA’]依赖php.ini中额外的设置,并且系统资源占用高,推荐使用php://input的方式进行数据的获取

注意:application/x-www-form-urlencoded这种数据类型,应该是最常见的 POST 提交数据的方式。 浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。很多时候,我们用 Ajax 提交数据时,也是使用这种方式。例如 JQuery 中的 Ajax Content-Type 默认值都是 application/x-www-form-urlencoded。这也就解释了为什么对于js传递的json数据,php可以通过$_POST直接获取了

标签: php
2017.2.20   /   热度:1494   /   分类: php

发表评论:

©地球仪的BLOG  |  Powered by Emlog