还记得纯真IP——QQWry.dat吗?
从我开始会上网的时候,外挂版QQ上的小卡片就显示对方的IP地址及其归属地了。
来自于知乎
QQWry.dat文件是显IP版QQ的数据库文件,用于获取对方IP及位置,纯真IP数据库也采用了这个格式,并沿用至今。
纯真IP库[官网]是民间自发收集、提交、聚合而来的数据库,囊括了国内外的大量IP数据,部分记录甚至比商业付费数据库更加准确。它的官网提供了记录提交和纠错的功能,来自全国各地的网友将不同地区的ISP及位置数据上传,管理员在统一整合后每5天更新一次。从2005年到现在的16年间,这个数据库已经聚合了超过五十万条IP记录。
纯真IP库是完全免费的,它的官网上有在线查询功能,同时也可以下载离线数据库用于低延迟场景,但数据不可用于商业用途。这些记录在稍加分析处理后能达到不错的效果,基本满足定位IP所处城市及ISP信息的需求,不过它目前只支持IPv4地址,在一些应用场景下稍显不足。
话不多说,言归正传,此PHP解析纯真IP数据库的源代码来自于itbdw/ip-database,有很长一段时间没更新了,最新版本为3.X,支持ipv4+ipv6,如需要2.x稳定版请访问 https://github.com/itbdw/ip-database/tree/2.x。
下载好文件IpLocation.php、QQwry.php、IpV6wry.php、StringParser.php、IpParserInterface.php,放在一个文件夹里(或者直接用我整理好的文件),上传到主题目录里。
把以下代码甩进functions.php即可:
//解析纯真IP获取评论者ip归属地 开始
//Code By HJYL.ORG
require get_template_directory() . '/qqwry/IpParserInterface.php';
require get_template_directory() . '/qqwry/IpLocation.php';
require get_template_directory() . '/qqwry/QQwry.php';
require get_template_directory() . '/qqwry/IpV6wry.php';
require get_template_directory() . '/qqwry/StringParser.php';
use itbdw\Ip\IpLocation;
function getCity($ip){
$qqwry_filepath = get_template_directory() .'/qqwry/qqwry.dat';
$getLocation = json_encode(IpLocation::getLocation($ip, $qqwry_filepath), JSON_UNESCAPED_UNICODE) . "\n";
$IPinfo = json_decode($getLocation, true);
$country = $IPinfo['country'];
$province = $IPinfo['province'];
/***************************************
//优先显示城市,其次省,最后国家
$city = $IPinfo['city'];
if($ip == '127.0.0.1'){
$data = '小黑屋';
}elseif($city != ""){
$data = $city;
}elseif($province !== "" && $city == ""){
$data = $province;
}else{
$data = $country;
}
**************************************/
if($ip == '127.0.0.1'){
$data = '小黑屋';
}elseif($province !== ""){
$data = $province;
}else{
$data = $country;
}
return $data;
}
//解析纯真IP获取评论者ip归属地 结束
调用方法:
echo getCity(get_comment_author_IP());
它支持composer写入内存,再读取:
composer require 'itbdw/ip-database' #注意^3.0只支持PHP5.4~7.0
到此结束!
画外音:折腾了一圈才发现,纯真数据库qqwry.dat也有 IPIP.net 格式版——qqwry.ipdb,来自于metowolf /qqwry.ipdb,目前最新纯真IP免费版数据库日期为2023.09.20。也就是说我之前用的大发分享的WordPress插件Easy Location IP数据库也可以更新到纯真IP最新版数据库了,不想麻烦的,也可以用这个。
—— 完 ——
版权声明: 本文采用 BY-NC-SA 协议进行授权,如无注明均为原创,转载请注明转自 皇家元林
本文链接: 基于纯真IP库实现评论者IP归属地
本文链接: 基于纯真IP库实现评论者IP归属地
有时候不准确的,比如我的地址有时候在你显示为昆明,有时候显示为重庆
1年前 · 昆明 · Firefox 118 Windows 10
@sagrre 是的,这可能就是免费版本与付费版本的区别吧!
1年前 · 合肥 · Wordpress App 23 iPhone iOS 16.6.1
特意看了下,不是你一个人不对,我自己的也不对,估计库就错了
1年前 · 昆明 · Firefox 118 Windows 10
@sagrre 好吧,还不如前几年的那个数据库。只不过最近突然不显示了,所以才折腾这个。不要求太准确。哈哈。
1年前 · 合肥 · Firefox 117 Windows 10
不错不错,,显示正确
1年前 · 嘉兴 · Google Chrome 86 Windows 10
@profan 哈哈,还是有对的呢
1年前 · 合肥 · Firefox 117 Windows 10
竟然有免费的v6的地址了?之前没发现呢
1年前 · 青岛 · Google Chrome 116 Mac OS X 10.15
@obaby 我看目前这个免费版还没有IPv6啊,只是这个解析程序支持解析ipv6
1年前 · 合肥 · Firefox 117 Windows 10
没有IPv6库?
11个月前 · · Firefox 121 Windows 10
@啊baby 是的,纯真IP社区版确实只支持IPv4,不支持IPv6的。商业版支持IPv6。
11个月前 · 安徽 · Firefox 122 Windows 10
收藏本文哈哈哈
9个月前 · 重庆 · Google Chrome 123 Windows 10