自己用微信公众号搭建了一个查单词的消息响应接口,升级php7之后发现用不了了,发送过去没有任何回应。
用微信自带的调试工具试了试,提示
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
语句中的HTTP_RAW_POST_DATA键不存在。改为
$postStr = $_POST;
发现根本没有获取到post数据,搜了半天发现一篇文章中提示要改为:
$postStr = file_get_contents("php://input");
修改后,一切恢复正常
引用:
//传统获取方式
$postStr = $GLOBALES['HTTP_RAW_POST_DATA'];
//php7之后取消了HTTP_RAW_POST_DATA方式获取 应改为
$postStr = file_get_contents("php://input");
//扩展一下
/**
$_POST: 常用于application/x-www.form-urlencoded方式的数据提交 如 表单提交 文件上传
file_get_contents("php://input"): 常用于非enctype="multipart/form-data"的数据提交
HTTP_RAW_POST_DATA: 常用于无法识别的数据格式,如能被$_POST识别 这这里取不到值。
设置 php.ini 中的 always_populate_raw_post_data 值为 On 才会生效
php7之后不支持。
终上: 关联数组键值对方式提交的数据 使用$_POST $_POST无法获取时,
使用php://input
**/