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编实现程动态图像的创建代码
Sep 28 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
php抽象方法和普通方法的区别点总结
Oct 13 PHP
详解PHP Swoole与TCP三次握手
May 27 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
一个显示天气预报的程序
2006/10/09 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
python钉钉机器人运维脚本监控实例
2019/02/20 Python
python打开使用的方法
2019/09/30 Python
Python的pygame安装教程详解
2020/02/10 Python
python实现人机五子棋
2020/03/25 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
电信专业应届生自荐信
2013/09/28 职场文书
采购文员岗位职责
2013/11/20 职场文书
2013的个人自我评价
2013/12/26 职场文书
八年级历史教学反思
2014/01/10 职场文书
土木工程专业推荐信
2014/02/19 职场文书
风险评估实施方案
2014/03/09 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python