[扩展推荐] geoip 获取 IP 地理信息

说明#

torann/geoip 是为 Laravel 定制的获取 IP 地理信息的扩展包,基于 maxmind/geoip-api-php,提供了非常优雅的接口。

完整的高质量扩展包推荐列表,请前往:下载量最高 100 个 Laravel 扩展包推荐

1. 安装#

1). 使用 composer 安装:

composer require torann/geoip

2). 修改 config/app 文件,在 providers 数组内追加如下内容:

'providers' => [
  ...
  'Torann\GeoIP\GeoIPServiceProvider',
],

3). 修改 config/app 文件,在 aliases 数组内追加如下内容:

'aliases' => [
  ...
  'GeoIP' => 'Torann\GeoIP\GeoIPFacade',
],

4). 生成配置文件

 php artisan vendor:publish

配置文件生成之后,可以在 config/geoip.php 进行修改

5). 更新 IP 地址库

php artisan geoip:update

2. 基础用法#

获取当前服务器 IP 对应的地理位置信息

$location = GeoIP::getLocation();

获取 IP: 232.223.11.11 对应的地理位置信息

$location = GeoIP::getLocation('232.223.11.11');

结果如下:

array (
    "ip"           => "232.223.11.11",
    "isoCode"      => "US",
    "country"      => "United States",
    "city"         => "New Haven",
    "state"        => "CT",
    "postal_code"  => "06510",
    "lat"          => 41.28,
    "lon"          => -72.88,
    "timezone"     => "America/New_York",
    "continent"    => "NA",
    "default"      => false
);

本项目由 The EST Group 成员 @monkey 整理发布,首发地为 Laravel China 社区,转载必须贴上原文链接 教程:【扩展推荐】geoip 获取 IP 地理信息

全文完。

monkey
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

需要设置 CACHE_DRIVER=array

8年前 评论

我的出错了
-- This cache store does not support tagging 求解

8年前 评论
monkey

@mandarava

修改你的 .env 文件,将缓存配置修改成 redis 即可

8年前 评论

@monkey ok 谢谢 能问一下怎么解析 域名么?

8年前 评论

1.'GeoIP' => 'Torann\GeoIP\GeoIPFacade', 增加之后会报错 找不到 Torann\GeoIP\GeoIPFacade 类。
最后看了一下代码,发现 将其修改为 'GeoIP' =>' Torann\GeoIP\GeoIP' .
发现还是无法获得 ip 信息。

  1. 经过调试发现无法连接 ip-api.com 接口。 将 config/geoip.php 中的'service' => 'ipapi' 修改成'service' => 'maxmind_database' 使用本地数据库进行查询。(同时关闭了 cache 功能 'cache' => 'none')
  2. 重新更新本地 数据库 执行 php artisan geoip:update
  3. maxmid_database 需要 require geoip2/geoip2:~2.0 支持,因此安装 composer require geoip2/geoip2:~2.0
  4. 实例代码:
    $config = include(DIR . '/../../../config/geoip.php');
    $cacheMock = Mockery::mock('Illuminate\Cache\CacheManager');
    $cacheMock->shouldReceive('tags')->with(['torann-geoip-location'])->andReturnSelf();
    $cIP = new GeoIP($config, $cacheMock);
    $location = $cIP->getLocation('1.180.212.164');

        var_dump($location);

    不太优雅,但是可以工作了。
    6. 美中不足,下载的 ip 库是英文版本,不知道哪里可以找到中文 mmdb 的 geoip 库

8年前 评论

输出结果有没有网络运营商信息?

7年前 评论

没有报错,一直返回的是一个空对象,懵懵的,有人遇见吗?
(望指点,谢谢)

6年前 评论

file
这是怎么回事,一直包报 502

5年前 评论

这篇有点坑,跟着另一个教程操作就正常了 PHP 实现通过 geoip 获取 IP 地理信息 https://juejin.im/post/5d0c7ed6e51d454f71439cf4

5年前 评论

将 config/geoip.php 中的'service' => 'ipapi' 修改成'service' => 'maxmind_database' 使用本地数据库进行查询,
执行 php artisan geoip:update
假如遇到如下异常
Updating...
In MaxMindDatabase.php line 74:
get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known

原因是 https://blog.maxmind.com/2019/12/18/signif...
从 2019 年 12 月 30 日开始,将要求 GeoLite2 数据库的用户注册一个 MaxMind 帐户并获取许可证密钥,以便下载 GeoLite2 数据库,那么可以注册一个账号然后就可以免费下载了。
注册地址:https://www.maxmind.com/en/geolite2/signup
注册成功后,可以翻译这个页面的内容,按照说明进行操作 https://dev.maxmind.com/geoip/geoipupdate/#For_Free_GeoLite2_Databases

5年前 评论