如何在PHP中通过IP地址获取地理位置信息(含国家/州代码、城市名)
Hey,在PHP里实现通过IP获取国家代码、州代码和城市名称,我有两个常用的方案,分别适合不同的场景,给你拆解清楚:
方案一:本地数据库查询(MaxMind GeoIP2)
这个方案的优势是不依赖外部服务、响应速度快,适合对稳定性要求高的场景,唯一需要做的是定期更新数据库。
第一步:获取免费数据库
去MaxMind官网注册账号,下载免费的GeoLite2 City数据库(格式为MMDB),这是目前最常用的免费IP地理数据库之一。第二步:安装PHP依赖
用Composer安装官方的GeoIP2库,执行以下命令:composer require geoip2/geoip2第三步:编写查询代码
示例代码如下,记得替换成你自己的数据库路径:require_once 'vendor/autoload.php'; use GeoIp2\Database\Reader; try { // 初始化数据库读取器 $reader = new Reader('/path/to/GeoLite2-City.mmdb'); // 要查询的IP地址,也可以用用户的真实IP,比如$_SERVER['REMOTE_ADDR'] $ip = '8.8.8.8'; $record = $reader->city($ip); // 获取需要的字段 $countryCode = $record->country->isoCode; // 国家代码,比如US $stateCode = $record->mostSpecificSubdivision->isoCode; // 州/省份代码,比如CA $cityName = $record->city->name; // 城市名称,比如Mountain View // 输出结果 echo "国家代码:$countryCode\n"; echo "州代码:$stateCode\n"; echo "城市名称:$cityName\n"; $reader->close(); } catch (\Exception $e) { // 处理异常,比如无效IP、数据库文件错误等 echo "查询失败:" . $e->getMessage(); }
方案二:调用第三方API
如果不想维护本地数据库,快速实现功能的话,可以用免费的第三方API,比如ip-api.com(免费版有请求限制,商用需付费)。
- 示例代码(用curl实现,比file_get_contents更稳定):
$ip = '8.8.8.8'; $url = "http://ip-api.com/json/{$ip}?fields=status,countryCode,regionCode,city"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 设置超时时间 $response = curl_exec($ch); curl_close($ch); if ($response) { $data = json_decode($response, true); if ($data['status'] === 'success') { $countryCode = $data['countryCode']; $stateCode = $data['regionCode']; $cityName = $data['city']; echo "国家代码:$countryCode\n"; echo "州代码:$stateCode\n"; echo "城市名称:$cityName\n"; } else { echo "查询失败:" . $data['message']; } } else { echo "API请求失败"; }
一些关键注意事项
- 获取用户真实IP:如果你的服务器在反向代理(比如Nginx、Cloudflare)后面,
$_SERVER['REMOTE_ADDR']会是代理服务器的IP,这时候要从$_SERVER['HTTP_X_FORWARDED_FOR']或$_SERVER['HTTP_CF_CONNECTING_IP'](Cloudflare场景)获取用户真实IP。 - 免费API限制:像ip-api的免费版每分钟最多45次请求,超过会被封禁,商用项目建议选择付费API(比如MaxMind的付费服务、IPinfo等)。
- 本地数据库更新:GeoLite2数据库每月更新一次,记得设置定时任务自动下载更新,保证数据准确性。
内容的提问来源于stack exchange,提问作者D Raja Nama
相关产品推荐
相关产品推荐

