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 相关文章推荐
转PHP手册及PHP编程标准
Dec 17 PHP
PHP与MySQL开发中页面乱码的产生与解决
Mar 27 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
ThinkPHP之getField详解
Jun 20 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 PHP
php实现读取内存顺序号
Mar 29 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
phpstudy后门rce批量利用脚本的实现
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中文件上传的安全问题
2006/10/09 PHP
十天学会php之第一天
2006/10/09 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
python与pycharm有何区别
2020/07/01 Python
PHP如何自定义函数
2016/09/16 面试题
链表面试题-一个链表的结点结构
2015/05/04 面试题
代理商会议邀请函
2014/01/27 职场文书
保护环境演讲稿
2014/05/10 职场文书
新教师培训心得体会
2014/09/02 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
写景作文评语集锦
2014/12/25 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python
python实现会员信息管理系统(List)
2022/03/18 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang