最近在做一个IP定位显示国家省市功能,在全网找了一圈,也每个安装体验过,测试他的数据库精准度。

本人是用PHP的第三方库,整理以下使用过的ip定位转地理位置库。

ip定位转地理位置库

1.itbdw/ip-database:

**gihub地址:**https://github.com/itbdw/ip-database
**特点:**支持将IP转化为结构化的国家、省、市、县、运营商、地区信息,IP数据库源于免费的纯真IP数据库。
安装:composer require 'itbdw/ip-database' ^3.0
**测试感受:**由于用的免费社区版的纯真数据库,ip库不全,电脑定位准,手机定位不太精准,可能定位在本省其他市。
**推荐指数:**⭐ ⭐⭐ ⭐⭐
使用方法:


//根据实际情况,基本上用框架(如 Laravel)的话不需要手动引入
//require 'vendor/autoload.php';
use itbdw\Ip\IpLocation;
//0配置使用
echo json_encode(IpLocation::getLocation($ip), JSON_UNESCAPED_UNICODE) . "\n";
//支持自定义文件路径
$qqwry_filepath = '/abspath/qqwry.dat';
$ipv6wry_path = '/abspath/ipv6wry.db';
echo json_encode(IpLocation::getLocation($ip, $qqwry_filepath), JSON_UNESCAPED_UNICODE) . "\n";

#响应返回
{
  "ip": "163.177.65.160",
  "country": "中国",
  "province": "广东",
  "city": "深圳市",
  "county": "",
  "isp": "联通",
  "area": "中国广东省深圳市腾讯计算机系统联通节点"
}

2.zhuzhichao/ip-location-zh:

gihub地址:https://github.com/zhuzhichao/ip-location-zh
**特点:**可以获得是 中国河南郑州,以及中国行政区划代码(支持到市级), 同样能获得国外的地址,但是没有国内详细。用的是IPIP.net的数据库
安装:composer require "zhuzhichao/ip-location-zh"
测试感受: IPIP.net的数据库是2019年,无语是电脑和手机,定位都不太准确
推荐指数: ⭐ ⭐⭐ ⭐
使用方法:

require 'vendor/autoload.php';
use Zhuzhichao\IpLocationZh\Ip;
var_dump(Ip::find('171.12.10.156'));

3.zoujingli/ip2region:

gihub地址: https://github.com/zoujingli/ip2region
特点: 基于 ip2region 简单整合,ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。可实现自动更新IP数据库API
在这里插入图片描述

安装:composer require zoujingli/ip2region"
测试感受: IP纯数据库比较新,响应快,功能齐全,支持多种语言。不过只能返回,国家|区域|省份|城市|ISP字符串,不能返回数据,需要自行改造。
ip2region开源:https://github.com/lionsoul2014/ip2region。
**推荐指数:**⭐ ⭐⭐ ⭐⭐
使用方法:

$ip2region = new \Ip2Region();
$result = $ip2region->simple('171.12.10.156');

自行改造返回数组,找到simple方法修改下toRegion

/**
     * 返回数组 [国家|区域|省份|城市|ISP]
     * @param $ip
     * @return false|string[]
     * @throws Exception
     */
    public function toRegion($ip)
    {
        $geo = $this->memorySearch($ip);
        $arr = explode('|', str_replace(['0|'], '|', isset($geo['region']) ? $geo['region'] : ''));
        if (($last = array_pop($arr)) === '内网IP') $last = '';
        array_push($arr, (empty($last) ? '' : "{$last}"));
        return $arr;
    }
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐