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 相关文章推荐
构建简单的Webmail系统
Oct 09 PHP
php chr() ord()中文截取乱码问题解决方法
Sep 08 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
Oct 08 PHP
Zend Framework框架Smarty扩展实现方法
Mar 22 PHP
php远程下载类分享
Apr 13 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
PHP设置images目录不充许http访问的方法
Nov 01 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 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翻页类
2009/06/01 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python使用chardet判断字符编码
2015/05/09 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
Django 重写用户模型的实现
2019/07/29 Python
python 字符串常用方法汇总详解
2019/09/16 Python
使用python实现画AR模型时序图
2019/11/20 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
Android笔试题总结
2014/11/29 面试题
试用期自我评价范文
2015/03/10 职场文书
教师考核鉴定意见
2015/06/05 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技