composer require geoip2/geoip2
<?php
require 'vendor/autoload.php';
use GeoIp2\Database\Reader;
$ip = '8.8.8.8'; // 你可以用 $_SERVER['REMOTE_ADDR'] 获取访客IP
// 数据库文件路径
$dbFile = __DIR__ . '/GeoLite2-City.mmdb';
if (!file_exists($dbFile)) {
die('GeoLite2 数据库文件不存在,请先下载并放到项目目录。');
}
$reader = new Reader($dbFile);
try {
$record = $reader->city($ip);
echo "国家: " . $record->country->name . "<br>";
echo "省份: " . $record->mostSpecificSubdivision->name . "<br>";
echo "城市: " . $record->city->name . "<br>";
echo "邮编: " . $record->postal->code . "<br>";
echo "纬度: " . $record->location->latitude . "<br>";
echo "经度: " . $record->location->longitude . "<br>";
} catch (Exception $e) {
echo "查询失败: " . $e->getMessage();
}
?>
这段PHP代码演示了如何使用MaxMind的GeoLite2-City数据库通过IP地址查询地理位置信息57。以下是代码的详细解释:
依赖加载与命名空间
require 'vendor/autoload.php' 加载Composer自动生成的依赖文件
use GeoIp2\Database\Reader 引入GeoIP2数据库读取器类57
IP地址设置
$ip = '8.8.8.8' 是示例IP,实际应用中可通过$_SERVER['REMOTE_ADDR']获取访问者真实IP15
数据库检查
检查GeoLite2-City.mmdb文件是否存在,若不存在则终止脚本511
数据库读取与查询
创建Reader实例并加载数据库文件57
$reader->city($ip)方法执行IP地理位置查询711
结果输出
从返回的$record对象提取多级地理信息:
国家名称:$record->country->name
省份/州:$record->mostSpecificSubdivision->name
城市:$record->city->name
邮编:$record->postal->code
经纬度:$record->location->latitude/longitude57
异常处理