
之前为了下载纯真的ip 地址数据库订阅了他们的公众号,前几天的时候看到推送说什么数据库格式更新了,有了 czdb 的格式,并且提供了各种语言的 sdk。
不过这个东西应该不是最近才推的,因为印象里貌似很久之前就看到皇家园林写的数据库迁移的文章。官方给的sdk 地址是这个:https://github.com/tagphi/czdb_searcher_php
按照文档操作,感觉也不复杂,直接:
composer require czdb/searcher
composer require czdb/searcher
composer require czdb/searcher
composer导入,就一行命令的事,但是为了弄个插件,需要在服务器上装这么个东西?那插件安装到别的地方也麻烦啊。想着一次性解决这个问题,直接下载源码,修改导入方式,按照网上的教程一通改,并不好使,最后 还是请教杜郎,才解决了这个问题:

真不错,直接小花花+1.
下载 copmoser 导出的包,直接扔到插件目录下,

因为最终要修改的是 ip2text.php 文件中的convertip函数,所以直接扔到 show-useragent 目录下,在代码中导入代码,并且初始化:
require_once __DIR__ . '/vendor/autoload.php';
$v4databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v4.czdb';
$v6databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v6.czdb';
$key = 'n2pf2******************==';
// Initialize the DbSearcher with the command line arguments
// $instance = new SomeNamespace\SomeClass();
$v4dbSearcher = new DbSearcher($v4databasePath, $queryType, $key);
$v6dbSearcher = new DbSearcher($v6databasePath, $queryType, $key);
// $dbSearcher = new DbSearcher($databasePath, $queryType, $key);
function convertip($ip) {
if(strpos($ip, ':') != false){
$region = $v6dbSearcher->search($ip);
}else if (strpos($ip, '.')!= false)
$region = $v4dbSearcher->search($ip);
// Handle the exception and inform the user
require_once __DIR__ . '/vendor/autoload.php';
use Czdb\DbSearcher;
$v4databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v4.czdb';
$v6databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v6.czdb';
$queryType = 'MEMORY';
$key = 'n2pf2******************==';
// Initialize the DbSearcher with the command line arguments
// $instance = new SomeNamespace\SomeClass();
$v4dbSearcher = new DbSearcher($v4databasePath, $queryType, $key);
$v6dbSearcher = new DbSearcher($v6databasePath, $queryType, $key);
// $dbSearcher = new DbSearcher($databasePath, $queryType, $key);
function convertip($ip) {
global $v4dbSearcher;
global $v6dbSearcher;
try{
if(strpos($ip, ':') != false){
$region = $v6dbSearcher->search($ip);
}else if (strpos($ip, '.')!= false)
{
$region = $v4dbSearcher->search($ip);
}else{
$region='Unknown';
}
}catch (Exception $e) {
// Handle the exception and inform the user
$region = 'Exception';
}
return $region;
}
require_once __DIR__ . '/vendor/autoload.php';
use Czdb\DbSearcher;
$v4databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v4.czdb';
$v6databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v6.czdb';
$queryType = 'MEMORY';
$key = 'n2pf2******************==';
// Initialize the DbSearcher with the command line arguments
// $instance = new SomeNamespace\SomeClass();
$v4dbSearcher = new DbSearcher($v4databasePath, $queryType, $key);
$v6dbSearcher = new DbSearcher($v6databasePath, $queryType, $key);
// $dbSearcher = new DbSearcher($databasePath, $queryType, $key);
function convertip($ip) {
global $v4dbSearcher;
global $v6dbSearcher;
try{
if(strpos($ip, ':') != false){
$region = $v6dbSearcher->search($ip);
}else if (strpos($ip, '.')!= false)
{
$region = $v4dbSearcher->search($ip);
}else{
$region='Unknown';
}
}catch (Exception $e) {
// Handle the exception and inform the user
$region = 'Exception';
}
return $region;
}
这里初始化了两个DbSearcher,分别对应 v4 和v6的查询。查询代码也很简单,就上面这几行。
同样,既然有了国家代码,那剩下的就是去掉原来通过接口查询所属国家的问题了,之前用接口是因为qqwry.dat 旧版本没有 v6 的数据,后来也一直没更新,所以归属地现实国旗是通过接口实现的,现在既然 46 都有了,那就可以直接本地解析了,不过比较坑爹的是 v4 的地址是“-”拼接的,v6 的地址感觉是空格,实际上是个制表符’\t’,为了这个制表符废了半天的劲,一直解析不出来,直接头大:
function getCountryName($str) {
$parts = explode('–', $str);
$name = count($parts) > 0 ? $parts[0] : '';
if (strpos($name, " ")!==false){
$parts = explode(" ", $str);
$name = count($parts) > 0 ? $parts[0] : '';
if (strpos($name, "\t")!==false){
$parts = explode("\t", $str);
$name = count($parts) > 0 ? $parts[0] : '';
function getCountryName($str) {
$parts = explode('–', $str);
$name = count($parts) > 0 ? $parts[0] : '';
// print($name);
if (strpos($name, " ")!==false){
$parts = explode(" ", $str);
$name = count($parts) > 0 ? $parts[0] : '';
// print($name);
}
if (strpos($name, "\t")!==false){
$parts = explode("\t", $str);
$name = count($parts) > 0 ? $parts[0] : '';
// print($name);
}
return $name;
}
function getCountryName($str) {
$parts = explode('–', $str);
$name = count($parts) > 0 ? $parts[0] : '';
// print($name);
if (strpos($name, " ")!==false){
$parts = explode(" ", $str);
$name = count($parts) > 0 ? $parts[0] : '';
// print($name);
}
if (strpos($name, "\t")!==false){
$parts = explode("\t", $str);
$name = count($parts) > 0 ? $parts[0] : '';
// print($name);
}
return $name;
}
之所以解析不出来是最开始的if (strpos($name, “\t”)!==false)用的单引号,后来才发现,单引号下转义字符无效,这尼玛是凭什么啊,果然 php 是最好的语言。
后面就是讲国家名转换为 2 位国家代码了:
function getCountryCode($countryName) {
$countryName = removeWhitespace($countryName);
$countryCode = 'unknown';
if (isset($countryMap[$countryName])) {
$countryCode = $countryMap[$countryName];
// ; return $countryCode;
return strtolower($countryCode);
function getCountryCode($countryName) {
$countryMap = array(
'中国' => 'CN',
'美国' => 'US',
'日本' => 'JP',
'韩国' => 'KR',
'俄罗斯' => 'RU',
'法国' => 'FR',
'德国' => 'DE',
'英国' => 'GB',
'意大利' => 'IT',
'加拿大' => 'CA',
// 省略部分国家地区
'瓦利斯和富图纳' => 'WF',
'也门' => 'YE',
'赞比亚' => 'ZM',
'津巴布韦' => 'ZW',
);
$countryName = removeWhitespace($countryName);
$countryCode = 'unknown';
if (isset($countryMap[$countryName])) {
$countryCode = $countryMap[$countryName];
}
// ; return $countryCode;
return strtolower($countryCode);
}
function getCountryCode($countryName) {
$countryMap = array(
'中国' => 'CN',
'美国' => 'US',
'日本' => 'JP',
'韩国' => 'KR',
'俄罗斯' => 'RU',
'法国' => 'FR',
'德国' => 'DE',
'英国' => 'GB',
'意大利' => 'IT',
'加拿大' => 'CA',
// 省略部分国家地区
'瓦利斯和富图纳' => 'WF',
'也门' => 'YE',
'赞比亚' => 'ZM',
'津巴布韦' => 'ZW',
);
$countryName = removeWhitespace($countryName);
$countryCode = 'unknown';
if (isset($countryMap[$countryName])) {
$countryCode = $countryMap[$countryName];
}
// ; return $countryCode;
return strtolower($countryCode);
}
到这里改造基本就全部完成了。
更新日志:
* 替换本地IP归属地查询数据库为纯真CZDB格式
* 替换IPv6归属地查询,替换为本地数据库,去掉查询服务器配置功能
* 鉴于纯真数据库需要授权码,需要去 https://cz88.com/geo-public 获取授权密钥以及数据库文件
* 密钥配置文件,ip2c-text.php $key = 'n2pf2******************pg==';
* 数据库下载之后放入show-useragent\czdb\db 目录下,文件名分别为: cz88_public_v4.czdb cz88_public_v6.czdb
= v15.01.01 =
* 替换本地IP归属地查询数据库为纯真CZDB格式
* 替换IPv6归属地查询,替换为本地数据库,去掉查询服务器配置功能
* 鉴于纯真数据库需要授权码,需要去 https://cz88.com/geo-public 获取授权密钥以及数据库文件
* 密钥配置文件,ip2c-text.php $key = 'n2pf2******************pg==';
* 数据库下载之后放入show-useragent\czdb\db 目录下,文件名分别为: cz88_public_v4.czdb cz88_public_v6.czdb
= v15.01.01 =
* 替换本地IP归属地查询数据库为纯真CZDB格式
* 替换IPv6归属地查询,替换为本地数据库,去掉查询服务器配置功能
* 鉴于纯真数据库需要授权码,需要去 https://cz88.com/geo-public 获取授权密钥以及数据库文件
* 密钥配置文件,ip2c-text.php $key = 'n2pf2******************pg==';
* 数据库下载之后放入show-useragent\czdb\db 目录下,文件名分别为: cz88_public_v4.czdb cz88_public_v6.czdb
插件安装无法直接使用,请按照下面的步骤操作:
* 需要去 https://cz88.com/geo-public 获取授权密钥以及数据库文件
* 密钥配置文件,ip2c-text.php $key = ‘n2pf2******************pg==’;
* 数据库下载之后放入show-useragent\czdb\db 目录下,文件名分别为: cz88_public_v4.czdb cz88_public_v6.czdb
实际效果:


插件下载地址:
温馨提示: 此处隐藏内容需要发表评论,并且审核通过后才能查看。
(发表评论请勾选 在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。)
(请仔细检查自己的昵称和评论内容,以免被识别为垃圾评论而导致无法正常审核。)
obaby
爱好广泛的火星小妖精,有问题欢迎留言交流啊~(✪ω✪)
爬虫类工具请先点击这个链接查看用法https://oba.by/?p=12240
闺蜜圈APP下载 https://guimiquan.cn
93 comments
我需要下载,很喜欢博主的技术
我需要下载,很喜欢博主的技术