**对比$_POST、$GLOBALS['HTTP_RAW_POST_DATA']和file_get_contents('php://input')
最近在开发微信接口,又学到了一些新的技术点,今天就把学到的关于接收数据的技术点给简单的罗列下。
- public function __construct($token, $wxuser = ''){
- $this -> auth($token, $wxuser) || exit;
- if(IS_GET){
- echo($_GET['echostr']);
- exit;
- }else{
- $xml = file_get_contents("php://input");
- $xml = new SimpleXMLElement($xml);
- $xml || exit;
- foreach ($xml as $key => $value){
- $this -> data[$key] = strval($value);
- }
- }
- }
上述代码是截取的一个片段,意思为把接收到的微信传过来的xml解析为数组。其中有一处file_get_contents('php://input'),后经查证,微信给开发者账号填写的url发送的是xml数据,但PHP默认只识别application/x-www.form-urlencoded标准的数据类型,对text/xml的内容无法解析为$_POST数组,因此会保留原型,可以交给file_get_contents(‘php://input’)接收,也可以用$GLOBALS['HTTP_RAW_POST_DATA']。
如,传过来的xml为
- <xml>
- <ToUserName><![CDATA[ebyben1413005325]]></ToUserName>
- <FromUserName><![CDATA[ga_6281708af4c6]]></FromUserName>
- <CreateTime>1413341614</CreateTime>
- <MsgType><![CDATA[text]]></MsgType>
- <Content><![CDATA[首页]]></Content>
- <MsgId>1234567890123456</MsgId>
解析过后为
- Array
- (
- [ToUserName] => ebyben1413005325
- [FromUserName] => ga_6281708af4c6
- [CreateTime] => 1413341614
- [MsgType] => text
- [Content] => 首页
- [MsgId] => 1234567890123456
- )
php://input 允许读取 POST 的原始数据。和$GLOBALS['HTTP_RAW_POST_DATA'] 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。同时两者皆不能用于接收enctype="multipart/form-data"形式的数据。
最后再说下$_SERVER['REQUEST_METHOD']这个变量,用过ThinkPHP的朋友应该在代码中使用类似IS_GET、IS_AJAX这种代码吧,追溯下源码,就可以看到
- define('REQUEST_METHOD',$_SERVER['REQUEST_METHOD']);
- define('IS_GET', REQUEST_METHOD =='GET' ? true : false);
- define('IS_POST', REQUEST_METHOD =='POST' ? true : false);
- define('IS_PUT', REQUEST_METHOD =='PUT' ? true : false);
- define('IS_DELETE', REQUEST_METHOD =='DELETE' ? true : false);
- define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false);
原来仅仅就用了这个变量,就达到效果。
**对比$_POST、$GLOBALS['HTTP_RAW_POST_DATA']和file_get_contents('php://input')的更多相关文章
- 微信公众号 $GLOBALS['HTTP_RAW_POST_DATA']数据问题
公司的微信公众号最近出现问题,所有的功能都不能用,一开始以为是微信公众号验证的问题,经过排查才发现是$GLOBALS['HTTP_RAW_POST_DATA']这里的问题,微信公众号会把用户的一些操作 ...
- 借助curl理解$GLOBALS['HTTP_RAW_POST_DATA'] ,$_POST, php://input
发送请求代码 post.php <?php $url='http://localhost/web/curl/url.php'; $data='a=123|b=2&c=3'; $heade ...
- $GLOBALS['HTTP_RAW_POST_DATA']、$_POST和php://input深入探究三者的区别
$_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变 ...
- php中获取数据 php://input、$_POST与$GLOBALS['HTTP_RAW_POST_DATA']三者的区别
$_POST 只有Coentent-Type的值为application/x-www.form-urlencoded和multipart/form-data两种类型时,$_POST才能获取到数据. $ ...
- php://input、$_POST与$GLOBALS['HTTP_RAW_POST_DATA']三者的区别
$_POST 只有Coentent-Type的值为application/x-www.form-urlencoded和multipart/form-data两种类型时,$_POST才能获取到数据. $ ...
- php获取post参数的几种方式 RPC 规定接收取值方式 $GLOBALS['HTTP_RAW_POST_DATA'];
http://www.cnblogs.com/zhepama/p/4022606.html PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型. ...
- $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别
$_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变 ...
- 微信公共平台php用$GLOBALS["HTTP_RAW_POST_DATA"]收不到信息解决方法
http://www.cnblogs.com/shendiao/archive/2013/04/24/3041450.html <?php /** * wechat php test */ // ...
- 转: $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别
$_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变 ...
随机推荐
- c++模板库(简介)
目 录 STL 简介 ......................................................................................... ...
- 伪分布模式下执行wordcount实例时报错解决办法
问题1.不能分配内存,错误提示如下: FAILEDjava.lang.RuntimeException: Error while running command to get file permiss ...
- struts+spring action应配置为scope="prototype"
truts+spring action应配置为scope="prototype" <bean id="personAction" scope=" ...
- 最长不下降子序列(LIS)
最长上升子序列.最长不下降子序列,解法差不多,就一点等于不等于的差别,我这里说最长不下降子序列的. 有两种解法. 一种是DP,很容易想到,就这样: REP(i,n) { f[i]=; FOR(j,,i ...
- 交叉编译php5,、nginx、squid方法
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 交叉编译php5 软件版本:php-5.4.27 依赖库:zlib,libxml2 交叉编译器:arm-hisi ...
- 在Linux用户空间做内核空间做的事情
导读 我相信,Linux 最好也是最坏的事情,就是内核空间(kernel space)和用户空间(user space)之间的巨大差别.如果没有这个区别,Linux 可能也不会成为世界上影响力最大的操 ...
- [BZOJ3670][UOJ#5][NOI2014]动物园
[BZOJ3670][UOJ#5][NOI2014]动物园 试题描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学 ...
- 将mysql的查询结果导出为csv
要将mysql的查询结果导出为csv,一般会使用php连接mysql执行查询,将返回的查询结果使用php生成csv格式再导出. 但这样比较麻烦,需要服务器安装php才可以实现. 直接使用mysql导出 ...
- 黑客讲述渗透Hacking Team全过程(详细解说)
近期,黑客Phineas Fisher在pastebin.com上讲述了入侵Hacking Team的过程,以下为其讲述的原文情况,文中附带有相关文档.工具及网站的链接,请在安全环境下进行打开,并合理 ...
- POJ 1456 Supermarket 区间问题并查集||贪心
F - Supermarket Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...