1. 程式人生 > >PHP實現通過geoip獲取IP地理資訊

PHP實現通過geoip獲取IP地理資訊

如果想獲取到使用者的地理資訊可以通過geoip來實現,或者第三方介面,下面是geoip庫的實現方式

geoip是通過來訪者的IP,定位他的經緯度,國家/地區,省市,甚至街道等位置資訊

torann/geoip 是為 Laravel 定製的獲取 IP 地理資訊的擴充套件包

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
]

 

純原創,希望可以對大家有幫助,文章會不斷更新,如有疑問,歡迎評論