如果想获取到用户的地理信息可以通过geoip来实现,或者第三方接口,下面是geoip库的实现方式
geoip是通过来访者的IP,定位他的经纬度,国家/地区,省市,甚至街道等位置信息
torann/geoip 是为 Laravel 定制的获取 IP 地理信息的扩展包
如果你想利用高德的api获取一些地理信息的话点击:juejin.im/post/684490…
1. 安装
1). 使用 composer 安装:
composer require torann/geoip复制代码
2). 修改 config/app
文件,在 providers
数组内追加如下内容:
'providers' => [
...
'Torann\GeoIP\GeoIPServiceProvider',
],复制代码
3). 修改 config/app
文件,在 aliases
数组内追加如下内容:
'aliases' => [
...
'GeoIP' => 'Torann\GeoIP\GeoIP',
],复制代码
4). 生成配置文件
php artisan vendor:publish复制代码
配置文件生成之后,可以在 config/geoip.php
进行修改
5). 更新 IP 地址库
php artisan geoip:update复制代码
- 经过调试发现无法连接ip-api.com接口。 将config/geoip.php中的 'service' => 'ipapi'修改成 'service' => 'maxmind_database' 使用本地数据库进行查询。(同时关闭了cache 功能 'cache' => 'none')
- 重新更新本地 数据库 执行 php artisan geoip:update
- maxmid_database需要require geoip2/geoip2:~2.0 支持,因此安装 composer require geoip2/geoip2:~2.0
- 报错信息:This cache store does not support tagging
- 修改你的
.env
文件,将缓存配置修改成redis
即可 (我主要出现修改了这里 就好了)
2. 基础用法
获取当前服务器 IP 对应的地理位置信息
use Torann\GeoIP\Facades\GeoIP;
$ip = $request->ip();
$location = GeoIP::getLocation($ip)->toArray();复制代码
获取 IP: 232.223.11.11 对应的地理位置信息
$location = GeoIP::getLocation('222.128.24.20')->toArray();复制代码
结果如下:
array:13 [
"ip" => "222.128.24.20"
"iso_code" => "CN"
"country" => "China"
"city" => "Beijing"
"state" => "BJ"
"state_name" => "Beijing"
"postal_code" => null
"lat" => 39.9288
"lon" => 116.3889
"timezone" => "Asia/Shanghai"
"continent" => "AS"
"currency" => "CNY"
"default" => false
]
参考链接:https://juejin.cn/post/6844903872410943501