PHP中为什么使用file_get_contents("php://input")接收微信通知

 更新时间:2023年07月01日 10:36:56   投稿:yin  
微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器事件推送,通知到开发者中心设置的服务器地址(回调url),开发者可以获取到该信息。PHP中为什么使用file_get_contents("php://input")来接收呢?为什么有些场景php://input接收不到?

微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式,通知到开发者在开发者中心处设置的服务器地址(回调url),从而开发者可以获取到该信息。PHP中为什么会使用file_get_contents("php://input")来接收呢?为什么有些场景file_get_contents("php://input")会接收不到呢?

php用file_get_contents("php://input")或者$HTTP_RAW_POST_DATA可以接收xml数据,

file_get_contents()

file_get_contents() 函数把整个文件读入一个字符串中。

php://input

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的。

php://input使用范围

1、 读取POST数据

2、不能用于multipart/form-data类型

$http_raw_post_data

$http_raw_post_data是PHP内置的一个全局变量。它用于,PHP在无法识别的Content-Type的情况下,将POST过来的数据原样地填入变量$http_raw_post_data。它同样无法读取Content-Type为multipart/form-data的POST数据。需要设置php.ini中的always_populate_raw_post_data值为On,PHP才会总把POST数据填入变量$http_raw_post_data。

php://input、$http_raw_post_data、$_POST、$_GET区别

1、GET提交时,不会指定Content-Type和Content-Length,它表示http请求body中的数据是使用http的post方法提交的表单数据,并且进行了urlencode()处理。

2、 POST提交时,Content- Type取值为application/x-www-form-urlencoded时,也指明了Content-Length的值,php会将http请求body相应数据会填入到数 组$_POST,填入到$_POST数组中的数据是进行urldecode()解析的结果。

3、php://input数据,只要Content-Type不为 multipart/form-data(该条件限制稍后会介绍)。那么php://input数据与http entity body部分数据是一致的。该部分相一致的数据的长度由Content-Length指定。 
4、仅当Content-Type为application/x-www-form-urlencoded且提交方法是POST方法时,$_POST数据与php://input数据才是”一致”(打上引号,表示它们格式不一致,内容一致)的。其它情况,它们都不一致。 
5、php://input读取不到$_GET数据。是因为$_GET数据作为query_path写在http请求头部(header)的PATH字段,而不是写在http请求的body部分。

接收和发送XML的php示例

php示例:接收XML

接收xml数据,并转化为array数组。

<?php
$xmlData = file_get_contents("php://input");
$obj = simplexml_load_string($xmlData,"SimpleXMLElement", LIBXML_NOCDATA);
$json = json_decode(json_encode($obj),true);

php示例:发送xml

<?php
$xml = '<xml>xmldata</xml>';//要发送的xml
$url = 'http://***.php';//接收XML地址
$header = 'Content-type: text/xml';//定义content-type为xml
$ch = curl_init(); //初始化
curl curl_setopt($ch, CURLOPT_URL, $url);//设置链接
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否返回信息
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//设置HTTP头
curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//POST数据
$response = curl_exec($ch);//接收返回信息
if(curl_errno($ch)){//出错则显示错误信息
    print curl_error($ch);
}
curl_close($ch); //关闭curl链接
echo $response;//显示返回信息
?>

到此这篇关于PHP中为什么使用file_get_contents("php://input")接收微信通知的文章就介绍到这了,更多相关PHP中file_get_contents("php://input")接收微信通知内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PHP切割整数工具类似微信红包金额分配的思路详解

    PHP切割整数工具类似微信红包金额分配的思路详解

    这篇文章主要介绍了 PHP切割整数工具类似微信红包金额分配的思路详解,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Zend Framework过滤器Zend_Filter用法详解

    Zend Framework过滤器Zend_Filter用法详解

    这篇文章主要介绍了Zend Framework过滤器Zend_Filter用法,结合实例形式分析了过滤器Zend_Filter的功能、原理、使用方法及相关注意事项,需要的朋友可以参考下
    2016-12-12
  • PHP 类与构造函数解析

    PHP 类与构造函数解析

    这篇文章给大家介绍了php类与构造函数解析,包括类的创建,字段与方法,构造函数等方面的内容,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-02-02
  • php中通过smtp发邮件的类,测试通过

    php中通过smtp发邮件的类,测试通过

    php中通过smtp发邮件的类,测试通过...
    2007-01-01
  • PHP实现两种排课方式

    PHP实现两种排课方式

    这篇文章主要介绍了PHP实现两种排课方式,第一种排课方式比较好理解,开始时间和结束时间,第二种比较复杂一些,有开始上课时间和结束上课时间和第几周,具体实现代码参考下本文
    2021-06-06
  • 搭建PhpStorm+PhpStudy开发环境的超详细教程

    搭建PhpStorm+PhpStudy开发环境的超详细教程

    这篇文章主要介绍了搭建PhpStorm+PhpStudy开发环境的超详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Laravel 5框架学习之子视图和表单复用

    Laravel 5框架学习之子视图和表单复用

    本文给大家主要介绍的是Laravel5框架中的子视图以及表单复用的用法,十分的细致全面,对于大家熟练掌握Laravel5框架非常有帮助,有需要的小伙伴可以参考下
    2015-04-04
  • Yii2中的场景(scenario)和验证规则(rule)详解

    Yii2中的场景(scenario)和验证规则(rule)详解

    Yii2的rule用于对模型属性进行验证,scenario用户定义不同场景下需要验证的模型,下面这篇文章主要给大家介绍了关于Yii2中场景(scenario)和验证规则(rule)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-01-01
  • ThinkPHP利用PHPMailer实现邮件发送实现代码

    ThinkPHP利用PHPMailer实现邮件发送实现代码

    本文章介绍了关于在thinkphp中利用了phpmailer来实现邮件发送的详细教程,有需要的朋友可以参考一下
    2013-09-09
  • PHP设计模式之适配器模式代码实例

    PHP设计模式之适配器模式代码实例

    这篇文章主要介绍了PHP设计模式之适配器模式代码实例,本文讲解了目标、角色、应用场景、优势等内容,并给出代码实例,需要的朋友可以参考下
    2015-05-05

最新评论