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 相关文章推荐
建立文件交换功能的脚本(一)
Oct 09 PHP
PHP 递归效率分析
Nov 24 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
初品cakephp 入门基础
Feb 16 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
Mar 27 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 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数据缓存的使用说明
2013/05/10 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
python中的句柄操作的方法示例
2019/06/20 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
linux面试相关问题
2013/04/28 面试题
大学学年自我鉴定
2013/10/28 职场文书
超市端午节活动方案
2014/01/23 职场文书
上班离岗检讨书
2014/09/10 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
关于颐和园的导游词
2015/01/30 职场文书
个性发展自我评价2015
2015/03/09 职场文书
大学军训口号大全
2015/12/24 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
Python Numpy库的超详细教程
2022/04/06 Python