微信公众号 $GLOBALS['HTTP_RAW_POST_DATA']数据问题

  公司的微信公众号最近出现问题,所有的功能都不能用,一开始以为是微信公众号验证的问题,经过排查才发现是$GLOBALS[‘HTTP_RAW_POST_DATA‘]这里的问题,微信公众号会把用户的一些操作和输入已数据的格式发送到在微信公众号中配置的url地址(一般是项目的服务器),因为是数据所以就用$GLOBALS[‘HTTP_RAW_POST_DATA‘]接收,然后在做数据转换,但是在日志中发现这个值是null,然后经过排查发现不知道什么时候在php.ini中禁掉了这个函数

always_populate_raw_post_data = -1

值的一提的是: PHP 5.6.0及更高版本不支持always_populate_raw_post_data,因此需要将其设置为-1。  也就是说PHP5.6之后不再支持此全局变量

所以为了项目更好的维护可以把这个变为   file_get_contents(‘php://input‘);

$GLOBALS ["HTTP_RAW_POST_DATA"]跟$_POST,file_get_contents(‘php://input‘) 差不多,用$GLOBALS ["HTTP_RAW_POST_DATA"]或file_get_contents(‘php://input‘)的情况大多是为了获取$_POST无法接收的数据类型(如XML数据)

在$GLOBALS ["HTTP_RAW_POST_DATA"]取不到值的情况下可以按以下方式排查:
1.用file_get_contents(‘php://input‘)获取数据。如果获取不到,则可能是数据传输错误,对请求进行捉包,分析数据。
2.如果file_get_contents(‘php://input‘)有数据。则查看php.ini配置文件。
找到如下,如果没开启则开启

always_populate_raw_post_data = On

现在来说一下   $_POST   $GLOBALS[‘HTTP_RAW_POST_DATA‘]   file_get_contents(‘php://input‘)  的区别,他们都是PHP获取post数据的方式,但还是有一些区别的

RPC 规定接收取值方式 $GLOBALS[‘HTTP_RAW_POST_DATA‘];
PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。

1、$_POST[‘paramName‘] 
只能接收Content-Type: application/x-www-form-urlencoded提交的数据,php会将http请求body相应数据会 填入到数组$_POST,填入到$_POST数组中的数据是进行urldecode()解析的结果。(其实,除了该Content-Type,还有 multipart/form-data表示数据是表单数据)

2、file_get_contents("php://input") 
适用大多数类型的Content-type,php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。

3、$GLOBALS[‘HTTP_RAW_POST_DATA‘]; 
总是产生 $HTTP_RAW_POST_DATA  变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA  对于 enctype="multipart/form-data"  表单数据不可用。

1,Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form- data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST
2,PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA
3, 只有Coentent-Type为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php: //input,否则其它情况都会。填入的长度,由Coentent-Length指定。
4,只有Content-Type为application/x-www-data-urlencoded时,php://input数据才 跟$_POST数据相一致。
5,php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input 比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini
6,PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。

总结如下:

1、如果是 application/x-www-form-urlencoded 和 multipart/form-data 格式 用 $_POST;
2、如果不能获取的时候比如 text/xml、application/json、soap,使用 file_get_contents(‘php://input‘),$GLOBALS[‘HTTP_RAW_POST_DATA‘]最好别用;

参考文章:https://blog.csdn.net/hpugym/article/details/54969457

微信公众号 $GLOBALS['HTTP_RAW_POST_DATA']数据问题

原文地址:https://www.cnblogs.com/skl-bobo/p/10863694.html

时间: 2024-10-04 16:28:19

微信公众号 $GLOBALS['HTTP_RAW_POST_DATA']数据问题的相关文章

关于ionic3做微信公众号

前段时间用ionic3做了一个微信商城,收尾的时候好多问题,就推翻了..谈一下我的感想吧 ionic3深度定制的一套框架,刚开始我的3.0.1当时还可以进行browser端的build,到最近3.6.0版本取消这个端的build命令,导致项目没有办法aot和prod 导致加载文件很大,移动端的流量金贵,虽然用了懒加载,一次性加载的数据还是有2M左右,项目打开的速度真的是龟速,还有ionic3没有路由使用了页面堆叠的方式,一开始一直以为这是路由,真的很傻很天真,在微信里面使用model加载的弹出页

(转)如何运营微信公众号

很多人对微信营销很感兴趣,现在微信用户数量惊人,确实应该学习一下,下面这篇文章跟大家分享一下 有的人错过了2003年开淘宝的时机,又错过了微博营销,在2013年微信公众号火起来的时候大家似乎没有错过,于是一头扎进微信营销的浪潮中.腾讯公布的数据是现在有200多万公众号,而且以每天8000个的速度在增加,一片欣欣向荣的画面.今天我以私人管家微信公众号运营的角度来浅析下如何运营微信公众号,把日常运营中的一些小技巧和感想分享给大家. 首先想说一点:运营微信公众号是一门艺术,需要你用心去经营.这是综合了

使用NodeJs开发微信公众号(一)

准备工作 1.首先注册自己的微信公众号. 微信公众号现在分为订阅号,服务号,企业号,服务号和企业号不对个人开发者开放,所以我们只能选择订阅号. 但是订阅号也有认证和未认证之分,认证的订阅号支持的接口更多也更高级,下图是微信的接口权限图,只截取了一部分. 如果我们想测试这些接口怎么办?我们可以申请微信的测试账号,测试账号只能用于测试接口,不能用于真实的项目.下面就看看怎么申请测试账号吧. 1.1进入微信公众平台首页 https://mp.weixin.qq.com/ 1.2在下方的账号分类里找到订

值得程序员和设计师关注的微信公众号

这篇文章分享了十多个技术和设计类微信公众号.其中有最受欢迎的热门公众号.也有专注某个技术或设计的公众号,涵盖 Java.Python.Android.iOS.Web前端.PHP.C/C++..NET.Linux.数据库.UI设计和Web网页设计等. 程序员的那些事 「程序员的那些事」是最受欢迎的程序员.IT技术和IT行业相关的微信公众号之一,分享最新编程技术.经典技术分享.IT行业动态.热门编程课程.高薪技术职位.程序员的日常,更有难得一见的IT相亲活动. 搜索微信号:iProgrammer 

如何注册一个微信公众号?

微信公众号分为以下几类: 服务号:给企业和组织提供更强大的业务服务与用户管理能力,帮助企业快速实现全新的公众号服务平台. 订阅号:为媒体和个人提供一种新的信息传播方式,构建与读者之间更好的沟通与管理模式. 企业号:为企业或组织提供移动应用入口,帮助企业建立与员工.上下游供应链及企业应用间的连接. 本教程以个人订阅号为例说明注册的流程. 一.立即注册 登录微信公众平台[https://mp.weixin.qq.com],点击立即注册 二.填写基本信息 注意:使用未注册过微信公众号的邮箱注册 三.邮

微信公众平台教程,注册申请、认证、开发、推广营销,教你怎么用微信公众号

微信公众平台教程 微信公众平台上至少有580多万公众号,8亿的微信用户参与其中,如此聚宝盆如何挖掘呢?本微信公众平台教程,以ytkah自己的使用体会教你怎么用微信公众号,包括微信公众平台注册申请.认证.开发.推广营销.成功案例,公众平台消息导出,关注用户备份,图文消息排版美化,图片尺寸,微信菜单设置,使用技巧等 教程目录 微信公众平台分类 微信公众平台注册,微信公众平台申请 微信公众平台登录 微信公众平台认证 微信公众平台开发 微信公众平台推广,微信公众平台营销 微信公众平台分类 服务号 给企业

如何通过RSS订阅微信公众号

简介 我比较喜欢在feedly上阅读rss源,手里有很多质量不错的微信公众号,因此喜欢聚合在一起阅读.找遍了网上,都没有解决方案.自己动手,丰衣足食,因此自己做了一个公众号转RSS的网站. 数据来源 数据来源于搜狗微信搜索中的公众号信息.这是目前最及时最稳定的方法. 使用方法 先打开搜狗微信搜索:http://weixin.sogou.com输入公众号的名称,点击搜索,例如程序人生进入第一个,链接为http://weixin.sogou.com/gzh?openid=oIWsFt_6y60Gtq

2018最新程序员必备技术类微信公众号

这篇文章推荐了包括技术.设计和极客相关的热门公众号. 技术类 业余草 微信号:yyucao 「业余草」是一个关注互联网及IT技术发展的独立个人博客,记录自己在学习和工作中的经验,面向开发者的知识分享深度IT技术博客,一个IT爱好者学习交流平台.投稿请发至[email protected]. 「业余草」公众号设计的技术包括:java,go,数据库,redis,springcloud,springboot,mongodb,linux等知识,更重要的是还有很多免费的视频教程可以下载.包含:数据库的My

第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号

第三百三十节,web爬虫讲解2-urllib库爬虫-实战爬取搜狗微信公众号 封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip