经过我一番搜索,原来是因为有了新规定,《互联网用户账号名称信息管理规定》 第十二条规定(自己看吧,我就不复制了)。
高德地图web服务开通以及获取key
打开高德开放平台:https://lbs.amap.com/
高德开放平台的服务多数是免费的,主要是依据开发者范围规格决定的,如下图所示。各位在看本文的站长们请以自身情况而定
![图片[1]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记](https://wxsnote.cn/wp-content/uploads/2023/06/c89175a534173007.png)
开发者自行做账号认证,认证地址:https://console.amap.com/dev/user/permission
![图片[2]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记](https://wxsnote.cn/wp-content/uploads/2023/06/235d982189172951.png)
点击后台的应用管理,点击创建应用
![图片[3]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记](https://wxsnote.cn/wp-content/uploads/2023/06/c415c748c3173039.jpg)
填写名称,类型选择自己网站的类型
![图片[4]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记](https://wxsnote.cn/wp-content/uploads/2023/06/9739746305173051.png)
点击添加key
![图片[5]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记](https://wxsnote.cn/wp-content/uploads/2023/06/4c44fbfc4f173103.png)
key名称要符合规范(支持汉字、数字、字母、下划线、中划线,不超过15个),平台选择web服务,如果你只有一台服务器用这项服务,可以添加IP白名单
![图片[6]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记](https://wxsnote.cn/wp-content/uploads/2023/06/1c0cda080c173116.png)
获得了key
![图片[7]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记](https://wxsnote.cn/wp-content/uploads/2023/06/ff4e4afd2d173126.jpg)
PHP示例
普通PHP程序和子比主题应用方法
普通PHP程序使用
子比主题评论区
以下代码仅适用于子比主题(子比最新版已内置),其他主题需要修改拼接位置
第一步:在主题根目录下创建func.php文件,并在第一行写上<?php(已经创建了此文件的就不用管了)
第二步:在func.php文件中最下行增加下面的代码
/**
* @description: 根据ip地址获取用户地区
* @param {*} $user_ip
* @return {*}
*/
function wxs_user_ip($user_ip)
{
$api_key = ''; //这里填上你申请的高德key
if (!$api_key || !$user_ip) {
return '';
}
$api = 'https://restapi.amap.com/v3/ip?key=' . $api_key . '&output=json&ip=' . $user_ip;
$json = file_get_contents($api);
$arr = (array) json_decode($json, true);
if (empty($arr['province'])) {
//没有获取到地区显示的内容
$dizhi = "未知地区"; //这里可以改成其他的
} else {
$dizhi = $arr['province'];
}
return $dizhi;
}
/**
* @description: 在评论区显示地区
* @param {*} $info
* @param {*} $comment
* @param {*} $depth
* @return {*}
*/
function wxs_footer_info_add_province($info, $comment, $depth)
{
$user_ip = $comment->comment_author_IP;
if ($user_ip) {
$province = wxs_user_ip($user_ip);
$province = $province ? '<span class="badg c-grey badg-sm flex0 ml3" data-toggle="tooltip" alt="IP:' . $user_ip . '" title="该用户评论时所在地区:' . $province . '">' . $province . '</span>' : '';
$info = $province . $info;
}
return $info;
}
add_filter('comment_footer_info', 'wxs_footer_info_add_province', 10, 3);
/**
*由子比主题作者进行代码优化
*原代码来自本帖作者 天无神话
**/
第三步:自己去高德申请接口后,修改以下代码中的高德key为你申请的
![图片[8]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记](https://wxsnote.cn/wp-content/uploads/2023/06/e17e17b1af173302.jpg)
代码的原理:使用wp记录评论者评论时的ip地址,将评论记录的ip作为接口参数拼接到接口url。使用php的函数获取api接口返回json数组。将json转换为php认识的内容,再将省份的内容提取出来。在指定位置增加添加经过判断是否为未知区域的归属地。
高德地图的api无法查询到部分归属地和海外归属地,除此之外还有一个大坑。它查询不到IP的归属地,就返回数组为空。我写这个功能代码的时候没有注意到,也没有加判断。当时有一个人的评论显示Array,当时给我弄懵了,后来才发现这个大坑。所以我给代码加了显示未知归属地的判断。
注意事项
如果你的网站使用了CDN,可增加以下代码,注意要先输出一次获取到的IP,查看是否为真实IP,若是,便无需再增加以下代码
增加以下代码以获取真实IP,不使用回源IP
function wxs_get_ip() {
if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match('/[\d\.]{7,15}/', $ip, $matches) ? $matches[0] : '';
}
$ip = wxs_get_ip();
$ip输出真实IP
wordpress网站中(子比已内置,无需修改),需要在wordpress配置文件wp-config.php第二行<?php下面增加下面的代码,用于获取用户真实ip地址,否则wp保存的就是cdn的回源的ip
//获取用户真实ip地址
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}
2024-06-02 13:50:34,某些文章具有时效性,若有错误或已失效,请在下方留言或加入QQ群:
399019539 联系群主反馈。注意一些链接无法访问可能是你网络的原因,如Github,并非资源地址失效。
登录后可快速点此处反馈,点击登录










请登录后查看评论内容