PHP實現通過geoip獲取IP地理資訊
阿新 • • 發佈:2018-12-28
如果想獲取到使用者的地理資訊可以通過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
]
純原創,希望可以對大家有幫助,文章會不斷更新,如有疑問,歡迎評論