用PHP写了一个使用ip2location数据库解析IP地址的API。

许都 112 2

步骤一

下载最新的IP2LOCATION-LITE-DB11.IPV6.BIN,无须下载IPV4数据库,因为该文件已经包含。

https://github.com/renfei/ip2location/releases

步骤二

首先需要下载引入ip2location的类文件并命名为IP2Location.php。因代码太长已折叠,请点击展开。

点击查看完整内容

步骤三

创建一个名为ip.php的文件,内容如下:

<?php
//作者:许都博客
// 引入ip2location的类文件
require_once 'IP2Location.php';

function getIPDetails($ip) {
    // 检查IP地址的有效性
    if (!filter_var($ip, FILTER_VALIDATE_IP)) {
        return "Invalid IP address";
    }
    
    //加载IP2Location数据库文件
    $database = __DIR__ . '/IP2LOCATION-LITE-DB11.IPV6.BIN';

    // 打开IP2Location数据库
    $db = new \IP2Location\Database($database, \IP2Location\Database::FILE_IO);
    
    // 查询IP地址的详细信息
    $record = $db->lookup($ip, \IP2Location\Database::ALL);
    
    // 去除不可用字段的值
    $record = array_filter($record, function($value) {
        return $value !== 'This parameter is unavailable in selected .BIN data file. Please upgrade.';
    });
    
    // 返回查询结果
    return $record ;
}

// 获取传递的IP地址
$ip = $_GET['ip'];

// 查询IP地址的详细信息
$details = getIPDetails($ip);

// 将结果以JSON格式输出
header('Content-Type: application/json');
echo json_encode($details, JSON_PRETTY_PRINT);
?>

如果需要隐藏.php请将以下内容添加到nginx配置文件server字段中

location / {
try_files $uri $uri/ $uri.php$is_args$args;
}

步骤四

//浏览器访问,请将api.example.com替换成自己的域名。
http://api.example.com/ip?ip=8.8.8.8
//如果你没有配置nginx隐藏.php
http://api.example.com/ip.php?ip=8.8.8.8

不出意外会返回以下数据。

{
    "ipNumber": "134744072",
    "ipVersion": 4,
    "ipAddress": "8.8.8.8",
    "latitude": 37.386051177978516,
    "longitude": -122.08384704589844,
    "countryName": "United States of America",
    "countryCode": "US",
    "timeZone": "-08:00",
    "zipCode": "94035",
    "cityName": "Mountain View",
    "regionName": "California"
}

PS:所有用到的文件都必须放在ip.php相同目录;有问题请给我留言。

发表评论 取消回复
表情 图片 链接 代码

  1. 九凌网络
    九凌网络 Lv 1

    该评论为私密评论

分享