PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析


Posted in PHP onJuly 03, 2017

本文分析了PHP中$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标准的数据类型。

这是手册里写的:

总是产生变量包含有原始的 POST 数据。否则,此变量仅在碰到未识别 MIME 类型的数据时产生。不过,访问原始 POST 数据的更好方法是 php://input。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。

问题: $HTTP_RAW_POST_DATA == $_POST 吗?

照手册所写 ,答案应该就为否。
假如不一样的话,他们的区别是什么呢?

我知道答案了,如下:

The RAW / uninterpreted HTTP POst information can be accessed with:
$GLOBALS['HTTP_RAW_POST_DATA']
This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).

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

PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型

用Content-Type=text/xml 类型,提交一个xml文档内容给了php server,要怎么获得这个POST数据。

The RAW / uninterpreted HTTP POST information can be accessed with: $GLOBALS['HTTP_RAW_POST_DATA'] This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).

由于PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此,对型如text/xml的内容无法解析为$_POST数组,故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。

另外还有一项 php://input 也可以实现此这个功能

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

应用:

a.htm:

<form action="post.php" method="post">
<input type="text" name="user">
<input type="password" name="password">
<input type="submit">
</form>

post.php:

<? echo file_get_contents("php://input"); ?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
汉字转化为拼音(php版)
Oct 09 PHP
php 缩略图实现函数代码
Jun 23 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
Zend Framework分页类用法详解
Mar 22 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
laravel通用化的CURD的实现
Dec 13 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 #PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 #PHP
使用Zttp简化Guzzle 调用
Jul 02 #PHP
详解php几行代码实现CSV格式文件输出
Jul 01 #PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 #PHP
详解如何在云服务器上部署Laravel
Jun 30 #PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 #PHP
You might like
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
PHP反射机制用法实例
2014/08/28 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
CI框架常用方法小结
2016/05/17 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jquery foreach使用示例
2013/09/12 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
socket + select 完成伪并发操作的实例
2017/08/15 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
python读取图片任意范围区域
2019/01/23 Python
学习python的前途 python挣钱
2019/02/27 Python
pywinauto自动化操作记事本
2019/08/26 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
出生公证委托书
2014/04/03 职场文书
小学数学课后反思
2014/04/23 职场文书
重阳节标语大全
2014/10/07 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
三八妇女节慰问信
2015/02/14 职场文书
党员带头倡议书
2015/04/29 职场文书
原告代理词范文
2015/05/25 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书