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初学者头疼问题总结
Oct 09 PHP
php流量统计功能的实现代码
Sep 29 PHP
php使用codebase生成随机数
Mar 25 PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
php session 写入数据库
Feb 13 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 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运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
php实现通过ftp上传文件
2015/06/19 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
PHP实现简单登录界面
2019/10/23 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
python之文件读取一行一行的方法
2018/07/12 Python
python url 参数修改方法
2018/12/26 Python
Python @property使用方法解析
2019/09/17 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
如何通过python实现全排列
2020/02/11 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
2015年复活节活动总结
2015/02/27 职场文书
农村环境卫生倡议书
2015/04/29 职场文书