PHP实现通过geoip获取IP地理信息

文章已迁移:https://juejin.im/post/5d0c7ed6e51d454f71439cf4

如果想获取到用户的地理信息可以通过geoip来实现,或者第三方接口,下面是geoip库的实现方式

geoip是通过来访者的IP,定位他的经纬度,国家/地区,省市,甚至街道等位置信息

torann/geoip 是为 Laravel 定制的获取 IP 地理信息的扩展包

如果你想利用高德的api获取一些地理信息的话点击:https://blog.csdn.net/qq175023117/article/details/85070396

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
]

 PHP实现通过geoip获取IP地理信息_第1张图片

纯原创,希望可以对大家有帮助,文章会不断更新,如有疑问,欢迎评论 

 

你可能感兴趣的:(PHP)