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

 更新时间:2015年03月03日 16:40:39   投稿:hebedich  
本文给大家汇总介绍了PHP获取POST数据的几种常用方法,这里分享给大家,有需要的小伙伴来参考下吧。

一、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&timestamp=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);

相关文章

  • CentOS 6.2使用yum安装LAMP以及phpMyadmin详解

    CentOS 6.2使用yum安装LAMP以及phpMyadmin详解

    本篇文章是对CentOS 6.2使用yum安装LAMP以及phpMyadmin进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 一文彻底搞懂php的后期静态绑定举例讲解

    一文彻底搞懂php的后期静态绑定举例讲解

    这篇文章主要来带大家彻底搞懂php的后期静态绑定的举例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Win下如何安装PHP的APC拓展

    Win下如何安装PHP的APC拓展

    这篇教程我们会告诉大家如何在windows上安装APC。我已经在windows server 2003上成功测试。当然,在你也可以使用windows xp做为测试服务器
    2013-08-08
  • Php Cookie的一个使用注意点

    Php Cookie的一个使用注意点

    这里需要提醒大家注意的一点是,在 php 中, 如果你在当前页面设置了COOKIE,在 当前页面刷新 或 转向到其他页面之前, cookie 的设置结果不会生效(cookie未过期的情况下)。
    2008-11-11
  • PHP版 汉字转码的实现详解

    PHP版 汉字转码的实现详解

    本篇文章是对用php实现汉字转码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php安全配置记录和常见错误梳理(总结)

    php安全配置记录和常见错误梳理(总结)

    下面小编就为大家带来一篇php安全配置记录和常见错误梳理(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 适用于php-5.2 的 php.ini 中文版[金步国翻译]

    适用于php-5.2 的 php.ini 中文版[金步国翻译]

    最近服务器基本上都是使用了php 5.2.*,以前发布的版本的php.ini已经不适用于现在的版本了,特发现了这篇文章特分享给大家。
    2011-04-04
  • PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]

    PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]

    在PHP中,使substr函数截取字符串末位会出现乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位不准确,造成断开的字符会把其后的..拉过来一起做一个字,所以出现了乱码。
    2011-12-12
  • 详解Laravel制作API接口

    详解Laravel制作API接口

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。本文将详细介绍Laravel制作API接口。
    2021-05-05
  • php中 ob_start等函数截取标准输出的方法

    php中 ob_start等函数截取标准输出的方法

    这篇文章主要介绍了php中 ob_start等函数截取标准输出的方法的相关资料,需要的朋友可以参考下
    2015-06-06

最新评论