i3geek.com
闫庚哲的个人博客

$GLOBALS[‘HTTP_RAW_POST_DATA’] 和$_POST的区别

一、超全局变量$GLOBALS

PHP超全局变量有很多,如下的都属于超全局变量(Superglobal):

$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。

官方说明:

  • $GLOBALS — 引用全局作用域中可用的全部变量。
  • 一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
  • 即出现过的全局变量,就可以通过$GLOBALS这个数组取得。
  • PHP生命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的。

php中global也有这样的功能,它和$GLOBALS的区别在于:

  • global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量。
  • $GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致。

对于类中的成员变量,类中函数必须使用$this->的方式访问,不能用$GLOBALS方式:

global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。

二、$GLOBALS[‘HTTP_RAW_POST_DATA’] 和$_POST的区别

  • $_POST:通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。
  • $GLOBALS[‘HTTP_RAW_POST_DATA’] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype=”multipart/form-data” 表单数据不可用。

也就是说基本上$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS[‘HTTP_RAW_POST_DATA’]来接收,比如 text/xml 或者 soap 等等。

补充说明:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。

赞(0)
未经允许不得转载:爱上极客 » $GLOBALS[‘HTTP_RAW_POST_DATA’] 和$_POST的区别
分享到: 更多 (0)

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    给力的超全局

    厦门微信营销5年前 (2015-01-17)回复
  2. #2

    不错的文章,内容出神入化.禁止此消息:nolinkok@163.com

    不锈钢网4年前 (2015-07-04)回复