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 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
收藏的一个php小偷的核心程序
Apr 09 PHP
检查php文件中是否含有bom的函数
May 31 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
Jun 25 PHP
php实现短信发送代码
Jul 05 PHP
PHP进行批量任务处理不超时的解决方法
Jul 11 PHP
PHP对象相关知识总结
Apr 09 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP+Oracle本地开发环境搭建方法详解
Apr 01 PHP
docker-compose部署php项目实例详解
Jul 30 PHP
PHP与Web页面的交互示例详解一
Aug 04 PHP
YII2 全局异常处理深入讲解
Mar 24 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
php下使用curl模拟用户登陆的代码
2010/09/10 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
使用Python来开发微信功能
2018/06/13 Python
分享vim python缩进等一些配置
2018/07/02 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
心理健康教育心得体会
2013/12/29 职场文书
音乐专业自荐信
2014/02/07 职场文书
有兼职工作经历的简历自我评价
2014/03/07 职场文书
留学生求职信
2014/06/03 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
公司费用报销管理制度
2015/08/04 职场文书
找规律教学反思
2016/02/23 职场文书
新员工入职感言范文!
2019/07/04 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL