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学习之PHP变量
Oct 09 PHP
用PHP+MySql编写聊天室
Oct 09 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
php绘制一条弧线的方法
Jan 24 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
PHP二维数组去重算法
Dec 17 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
PHP生成随机码的思路与方法实例探索
Apr 11 PHP
laravel 实现用户登录注销并限制功能
Oct 24 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 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
建立动态的WML站点(一)
2006/10/09 PHP
php+mysql数据库查询实例
2015/01/21 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
checkbox 多选框 联动实现代码
2008/10/22 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
javascript History对象原理解析
2020/02/17 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
幼儿园大班毕业教师寄语
2014/04/03 职场文书
探亲假请假条
2014/04/11 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL