文章详情
通过ip地址查询归属地,使用库ip2region
Posted on 2025-01-01 19:09:45 by 主打一个C++
ip2region - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率。
提供了众多主流编程语言的 `xdb` 数据生成和查询客户端实现。当前使用的php版本地址: https://github.com/lionsoul2014/ip2region/blob/master/binding/php/XdbSearcher.class.php
`xdb` 支持亿级别的 IP 数据段行数,默认的 region 信息都固定了格式:`国家|区域|省份|城市|ISP`,缺省的地域信息默认是0。
数据库下载: https://github.com/lionsoul2014/ip2region/blob/master/data/ip2region.xdb
//增加调用函数如下:
function get_region($ip)
{
// 数据库文件路径
$dbFile = get_current_dir('/ip2region.xdb');
try {
$searcher = XdbSearcher::newWithFileOnly($dbFile);
} catch (Exception $e) {
//printf("failed to create searcher with '%s': %s\n", $dbFile, $e);
return false;
}
$sTime = XdbSearcher::now();
$region = $searcher->search($ip);
if ($region === null) {
//printf("failed search(%s)\n", $ip);
return false;
}
//printf("{region: %s, took: %.5f ms}\n", $region, XdbSearcher::now() - $sTime);
//格式化
$regionString = $region;
// 去掉字符串中的花括号
$regionString = trim($regionString, "{}");
// 将字符串分割为两部分
$regionParts = explode(", took: ", $regionString);
// 取出region部分
$regionPart = $regionParts[0];
// 去掉region: 和后面的|电信
$regionPart = str_replace("region: ", "", $regionPart);
$regionPart = explode("|", $regionPart);
// 取出国家、省、地区
//$country = $regionPart[0];
$province = $regionPart[2];
$city = $regionPart[3];
//$y = $regionPart[4];
// echo "国家: " . $country . "\n";
// echo "省: " . $province . "\n";
// echo "地区: " . $city . "\n";
// echo "运营商: " . $y . "\n";
if($province == '0'){
$province = "未知";
}
return array("province" => $province, "city" => $city);
}
//调用:
require './ip2region/class_ip.php';
$ip = '123.2.3.4';
$arr = get_region($ip);
print_r($arr);
//我只需要省份和市级,测试结果
*转载请注明出处:原文链接:https://cpp.vin/page/113.html