[扩展推荐] 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 地理信息
全文完。
需要设置 CACHE_DRIVER=array
我的出错了
-- This cache store does not support tagging 求解
@mandarava
修改你的
.env
文件,将缓存配置修改成redis
即可@monkey ok 谢谢 能问一下怎么解析 域名么?
1.'GeoIP' => 'Torann\GeoIP\GeoIPFacade', 增加之后会报错 找不到Torann\GeoIP\GeoIPFacade 类。
最后看了一下代码,发现 将其修改为'GeoIP' =>' Torann\GeoIP\GeoIP' .
发现还是无法获得ip信息。
实例代码:
$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');
不太优雅,但是可以工作了。
6.美中不足,下载的ip库是英文版本,不知道哪里可以找到中文mmdb的geoip库
输出结果有没有网络运营商信息?
没有报错,一直返回的是一个空对象,懵懵的,有人遇见吗?
(望指点,谢谢)
这是怎么回事,一直包报502
这篇有点坑,跟着另一个教程操作就正常了 PHP实现通过geoip获取IP地理信息https://juejin.im/post/5d0c7ed6e51d454f71439cf4
将 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