本文不谈商业服务,只讨论免费的服务。

如果不考虑商业用途,只是个人学习使用的话,那么 ipip.net 的地址库应该是最好用的,创始人是国内早期的站长。

2025-10-14T03:12:39.png

不过刚发现从2019年开始就停止更新了。。。

2025-10-14T03:15:22.png

企业版是正常更新的:

2025-10-14T03:19:52.png

但如果商业使用,ipip.net 就必须付费了。

还好有国外的这些。

2025-10-14T02:55:48.png

在中国大陆的实际表现(社区与实测汇总)

2025-10-14T02:56:15.png

平均城市级正确率在 60%左右,但省级准确率达 80–90%。

综合来说,推荐优先级如下:

GeoLite2 ≥ IP2Location DB9 ≥ DB-IP Lite

GeoLite2 下载地址

GeoLite2-City.mmdb

PS: 从 2019 年底开始,下载 GeoLite2-City.mmdb 必须先注册登录 MaxMind 帐号。这是 MaxMind 公司根据隐私法规(GDPR / CCPA)调整后实施的强制措施。

以前(2019 年前)GeoLite2 是完全公开的匿名下载;但自从隐私法规要求对 IP 数据分发进行追踪后,MaxMind 改为:“所有下载必须使用授权 License Key 进行身份验证。”

官方要求的流程

进入 https://www.maxmind.com/en/geolite2/signup 注册账号

注册一个免费 MaxMind 账号(个人邮箱即可,不需企业信息)。

然后登录后访问 https://www.maxmind.com/en/accounts/current/license-key 创建 License Key。

点击 “Generate new license key”,填入名称(例如 laravel_geoip),选择 “No” for “Will this key be used for GeoIP Update program?”(除非你要用 CLI 自动更新),系统生成一串 16 位左右的 Key,如“abCdEfGhIjKlMnOp”,最后使用 key 拼装 URL 下载即可。

例如:

wget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=YOUR_KEY&suffix=tar.gz" -O GeoLite2-City.tar.gz

解压:

tar -xzf GeoLite2-City.tar.gz

里面就有 GeoLite2-City.mmdb。

也可以使用官方 CLI 工具(可定时更新)。

macOS 用户操作如下( Win/Linux 类似):

brew install geoipupdate

编辑配置文件 /usr/local/etc/GeoIP.conf:

AccountID YOUR_ACCOUNT_ID
LicenseKey YOUR_KEY
EditionIDs GeoLite2-City

执行更新:

geoipupdate

在 PHP 项目中使用

先安装依赖:

composer require geoip2/geoip2

示例代码:

use GeoIp2\Database\Reader;

$reader = new Reader(storage_path('geoip/GeoLite2-City.mmdb'));
$record = $reader->city($ip);

return [
    'country' => $record->country->isoCode ?? '',
    'province' => $record->subdivisions[0]->names['zh-CN'] ?? '',
    'city' => $record->city->names['zh-CN'] ?? '',
    'lat' => $record->location->latitude,
    'lon' => $record->location->longitude,
];

names['zh-CN'] 可取到中文城市名。

在 Laravel 项目中建议使用下面的这个文件路径:

storage/app/geoip/GeoLite2-City.mmdb

然后 .env 里写路径:

GEOIP_DB_PATH=storage/app/geoip/GeoLite2-City.mmdb

最后补充说明

GeoLite2 仍是免费使用(非商业版),只是需要账户绑定。下载次数有限制(但足够用)。

更新周期:官方每周更新(建议每月拉取一次)。若部署多台服务器,可缓存一份 .mmdb 文件在 OSS/NAS 中同步,不用每台都登录下载。

标签: php, ip, GeoLite2

添加新评论