GeoIP2数据库——根据ip确定国家/地区

由于GEOIP官方的原免费GeoLite Legacy数据库(.dat)已于2019年1月开始不再提供更新和支持。

而网上的90%的教程还是老教程, 就想着和大家分享一下.

 

项目中原本使用的是纯真数据库, 但是老板说要换成geoIP2, 最后选择了免费的GeoLite2 City.mmdb

mmdb下载地址: https://www.maxmind.com/en/accounts/464237/geoip/downloads (需要注册一个账号, 登录后才能下载, 直接注册就好. 去官网下可以下到最新的,网上很多地方的都不是最新的, 还要积分)

具体下载那个库需要大家根据自己需求决定了.

解压后的目录

 

下载DB-Reader-php

1.   composer require maxmind-db/reader:~1.0

2.  将上面下载的GeoLite2-City.mmdb 移到自己的项目目录下

<?php

namespace App\Logic;
use MaxMind\Db\Reader;
require_once(APP_PATH . '/../vendor/autoload.php');

class Country extends Base
{ 

   public static function getIpInfo($ip)
    {
//        澳门 60.246.49.9  香港 203.186.145.250   台湾  114.44.227.87

        $reader = new Reader(ROOT_PATH . '/sdk/GeoLite2-City.mmdb'); // 这个就是你mmdb存放的地址
        $ipInfo = $reader->get($ip);
        $reader->close();

        print_r($ipInfo);
    }
}

?>

这里面有一个小小的尴尬,就是官网给的github 地址里有个要求是要php大于7.2. 我项目用的是7.0. 升级吧又怕有各种问题, 不升级又用不了.因为项目中还用了Python, 就看了一下Python的文档, 结果发现下面这句话, PHP的要求中是没有这句话的, 试了一下, 果然7.0也可以用. 瞬间感觉这写文档真坑.

GitHub地址:  https://github.com/maxmind/MaxMind-DB-Reader-php

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在ThinkPHP项目中使用GeoIP2来实现限制请求IP只能巴西访问,你可以按照以下步骤进行配置: 1. 安装GeoIP2依赖包:在命令行中,进入你的ThinkPHP项目目录,然后运行以下命令来安装GeoIP2依赖包: ```shell composer require geoip2/geoip2:~2.0 ``` 2. 下载GeoIP2数据库:访问MaxMind网站(https://dev.maxmind.com/geoip/geoip2/geolite2/),下载GeoIP2数据库文件(通常是以.mmdb扩展名结尾的文件)。 3. 将GeoIP2数据库文件放置在项目的合适位置,例如`public`文件夹下的`geoip`文件夹。 4. 在ThinkPHP项目中创建一个新的中间件(Middleware),用于检查请求IP是否为巴西的IP。在命令行中,进入你的ThinkPHP项目目录,然后运行以下命令来创建中间件: ```shell php think make:middleware BrazilIPCheck ``` 5. 编辑刚创建的中间件文件:在`app/middleware`目录下找到并打开`BrazilIPCheck.php`文件。 6. 在`handle`方法中,添加以下代码来检查请求IP是否为巴西的IP: ```php use GeoIp2\Database\Reader; public function handle($request, \Closure $next) { $ip = $request->ip(); // 加载GeoIP2数据库 $databasePath = public_path('geoip/GeoLite2-Country.mmdb'); $reader = new Reader($databasePath); try { // 获取请求IP国家信息 $record = $reader->country($ip); $countryCode = $record->country->isoCode; // 如果不是巴西的IP,则返回403 Forbidden 错误 if ($countryCode !== 'BR') { return response('403 Forbidden', 403); } } catch (\Exception $e) { // 处理数据库加载或查询错误 return response('500 Internal Server Error', 500); } return $next($request); } ``` 7. 保存并关闭`BrazilIPCheck.php`文件。 8. 在`app/middleware`目录下的`middleware.php`文件中,注册刚创建的中间件: ```php return [ // ... \app\middleware\BrazilIPCheck::class, // ... ]; ``` 9. 现在,所有请求将通过中间件进行处理,如果请求IP不是巴西的IP,将返回403 Forbidden 错误。 请注意,以上步骤仅适用于限制请求IP只能巴西访问。如果需要更复杂的访问控制和安全性,建议结合其他认证和授权机制来实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值