PHP获取POST数据的几种方法汇总


Posted in PHP onMarch 03, 2015

一、PHP获取POST数据的几种方法

方法1、最常见的方法是:$_POST['fieldname'];

说明:只能接收Content-Type: application/x-www-form-urlencoded提交的数据
解释:也就是表单POST过来的数据

方法2、file_get_contents("php://input");

说明:
允许读取 POST 的原始数据。
和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。
php://input 不能用于 enctype="multipart/form-data"。
解释:
对于未指定 Content-Type 的POST数据,则可以使用file_get_contents(“php://input”);来获取原始数据。
事实上,用PHP接收POST的任何数据都可以使用本方法。而不用考虑Content-Type,包括二进制文件流也可以。
所以用方法二是最保险的方法

方法3、$GLOBALS['HTTP_RAW_POST_DATA'];

说明:
总是产生 $HTTP_RAW_POST_DATA  变量包含有原始的 POST 数据。
此变量仅在碰到未识别 MIME 类型的数据时产生。
$HTTP_RAW_POST_DATA  对于 enctype="multipart/form-data"  表单数据不可用
如果post过来的数据不是PHP能够识别的,可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,
比如 text/xml 或者 soap 等等
解释:
$GLOBALS['HTTP_RAW_POST_DATA']存放的是POST过来的原始数据。
$_POST或$_REQUEST存放的是 PHP以key=>value的形式格式化以后的数据。
但$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST过来的数据取决于centent-Type的设置,即POST数据时 必须显式示指明Content-Type: application/x-www-form-urlencoded,POST的数据才会存放到 $GLOBALS['HTTP_RAW_POST_DATA']中

二、演示

1、PHP 如何获取POST过来的XML数据和解析XML数据

比如我们在开发微信企业号时,如何处理用户回复过来的数据呢?
文档:http://qydev.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%99%AE%E9%80%9A%E6%B6%88%E6%81%AF
首先查阅文档,可知道:启用开发模式后,当用户给应用回复信息时,微信服务端会POST一串XML数据到已验证的回调URL

假设该URL为 http://www.xxx.com
Http请求方式: POST
http://www.xxx.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323

POST的XML内容为:

<xml>

   <ToUserName><![CDATA[toUser]]></ToUserName>

   <FromUserName><![CDATA[fromUser]]></FromUserName> 

   <CreateTime>1348831860</CreateTime>

   <MsgType><![CDATA[text]]></MsgType>

   <Content><![CDATA[this is a test]]></Content>

   <MsgId>1234567890123456</MsgId>

   <AgentID>1</AgentID>

</xml>

那么怎么接收这段内容呃?
这时就可以用到:方法2(file_get_contents("php://input"))、方法3($GLOBALS['HTTP_RAW_POST_DATA'])

方法2(file_get_contents("php://input")):

$input = file_get_contents("php://input"); //接收POST数据

$xml = simplexml_load_string($input); //提取POST数据为simplexml对象

var_dump($xml);

方法3($GLOBALS['HTTP_RAW_POST_DATA'])

$input = $GLOBALS['HTTP_RAW_POST_DATA'];

libxml_disable_entity_loader(true);

$xml = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);

var_dump($xml);
PHP 相关文章推荐
FCKeditor添加自定义按钮
Mar 27 PHP
php 将excel导入mysql
Nov 09 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
May 16 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
php开发时容易忘记的一些技术细节
Feb 03 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 PHP
php函数实现判断是否移动端访问
Mar 03 #PHP
php中instanceof 与 is_a()区别分析
Mar 03 #PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 #PHP
ecshop 2.72如何修改后台访问地址
Mar 03 #PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
Mar 03 #PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 #PHP
php使用curl出现Expect:100-continue解决方法
Mar 03 #PHP
You might like
php 三维饼图的实现代码
2008/09/28 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
浅析使用Python操作文件
2017/07/31 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
Linux的主要特性
2014/10/06 面试题
应届中专生自荐书范文
2014/02/13 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
学风建设演讲稿
2014/09/12 职场文书
外科护士长工作总结
2015/08/12 职场文书