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

若是想获取到用户的地理信息能够经过geoip来实现,或者第三方接口,下面是geoip库的实现方式php

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

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

若是你想利用高德的api获取一些地理信息的话点击:juejin.im/post/5d0c7e…github

1. 安装

1). 使用 composer 安装:redis

composer require torann/geoip复制代码

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

'providers' => [
  ...
  'Torann\GeoIP\GeoIPServiceProvider',
],复制代码

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

'aliases' => [
  ...
  'GeoIP' => 'Torann\GeoIP\GeoIP',
],复制代码

4). 生成配置文件数组

php artisan vendor:publish复制代码

配置文件生成以后,能够在 config/geoip.php 进行修改缓存

5). 更新 IP 地址库bash

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
]复制代码

纯原创,但愿能够对你们有帮助,文章会不断更新,若有疑问,欢迎评论

相关文章
相关标签/搜索