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&amp;MYSQL服务器配置说明
Oct 09 PHP
PHP4实际应用经验篇(9)
Oct 09 PHP
PHP 编写的 25个游戏脚本
May 11 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
php获取url参数方法总结
Nov 13 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 PHP
laravel实现简单用户权限的示例代码
May 28 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
php解析xml方法实例详解
2015/05/12 PHP
php数据访问之增删改查操作
2016/05/09 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
jQuery中next方法用法实例
2015/04/24 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python简单实现操作Mysql数据库
2018/01/29 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
高中生毕业学习总结的自我评价
2013/11/14 职场文书
项目经理任命书范本
2014/06/05 职场文书
小学生运动会报道稿
2014/09/12 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
Python上下文管理器Content Manager
2021/06/26 Python