【扩展推荐】geoip 获取 IP 地理信息

教程 monkey ⋅ 于 1年前 ⋅ 最后回复由 鹿鹿君 1个月前 ⋅ 5596 阅读

说明

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 社区,转载必须贴上原文链接 https://laravel-china.org/topics/2537

全文完。

本文章首发在 Laravel China 社区
回复数量: 6
  • ishaiua ai cai ao iao niao cai niao
    1年前

    需要设置 CACHE_DRIVER=array

  • mandarava
    1年前

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

  • monkey 最重要的事,永远只有一件 1
    1年前

    @mandarava

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

  • mandarava
    1年前

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

  • switf
    1年前

    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个月前

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

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档