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
]複製代碼

純原創,但願能夠對你們有幫助,文章會不斷更新,若有疑問,歡迎評論

相關文章
相關標籤/搜索