pulkitjalan / geoip
Requires
- php: ^8.1
- geoip2/geoip2: ^3.0
- guzzlehttp/guzzle: ^7.5|^7.8
- illuminate/console: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- mockery/mockery: ^1.6
- pestphp/pest: ^1.20|^2.0
README
支持 Laravel 的 IP 地理位置包装器
支持的驱动程序(服务)
要求
- PHP >= 8.1
安装
通过 composer 安装
composer require pulkitjalan/ip-geolocation
Laravel
提供 Laravel 服务提供者和外观。
将以下内容添加到您的 config/app.php
中的 providers
数组中
PulkitJalan\IPGeolocation\IPGeolocationServiceProvider::class
接下来,将以下内容添加到您的 config/app.php
中的 aliases
数组中
'IPGeolocation' => PulkitJalan\IPGeolocation\Facades\IPGeolocation::class
然后运行 php artisan vendor:publish --provider="PulkitJalan\IPGeolocation\IPGeolocationServiceProvider" --tag="config"
来发布配置文件。
使用较旧的 PHP / Laravel 版本?
如果您使用的是低于 8.1 的 PHP 版本或低于 9.0 的 Laravel 版本,请使用此包的旧版本。
用法
ipGeolocation 类将配置数组作为第一个参数,或者默认使用 ip-api
驱动程序。
示例
<?php use PulkitJalan\IPGeolocation\IPGeolocation $ip = new IPGeolocation(); $lat = $ip->getLatitude(); // 51.5141 $lon = $ip->getLongitude(); // -3.1969
IP-API
要使用 ip-api pro 服务,您可以在配置中设置选项。
专业示例
$config = [ 'driver' => 'ip-api', 'ip-api' => [ 'key' => 'YOUR IP-API KEY', ], ];
Maxmind 数据库
要使用 Maxmind 数据库作为驱动程序,您可以在配置中设置选项。
数据库示例
$config = [ 'driver' => 'maxmind_database', 'maxmind_database' => [ 'database' => '/path/to/database.mmdb', ], ];
Maxmind Api
要使用 Maxmind api 作为驱动程序,您可以在配置中设置选项。
Web API 示例
$config = [ 'driver' => 'maxmind_api', 'maxmind_api' => [ 'user_id' => 'YOUR MAXMIND USER ID', 'license_key' => 'YOUR MAXMIND LICENSE KEY' ], ];
IPStack
要使用 ipstack 作为驱动程序,请设置配置。
示例
$config = [ 'driver' => 'ipstack', 'ipstack' => [ 'key' => 'YOUR IPSTACK KEY', 'secure' => true, // (optional) use https ], ];
Laravel
在 Laravel 中使用此包,只需更新 config/ip-geolocation.php
中的配置文件即可获得相同的效果。可以使用 IPGEOLOCATION_DRIVER
环境变量设置驱动程序。
可用方法
IPGeolocation 将尝试按照以下顺序使用以下 http 头来确定 IP:HTTP_CLIENT_IP
、HTTP_X_FORWARDED_FOR
、HTTP_X_FORWARDED
、HTTP_FORWARDED_FOR
、HTTP_FORWARDED
、REMOTE_ADDR
。可选地使用 setIp
方法来设置它。
$ip->setIp('127.0.0.1'); // Laravel IPGeolocation::setIp('127.0.0.1');
有几种方法可以提取所需的信息。所有方法在数据不可用时都将返回空字符串。
获取纬度
$ip->getLatitude(); // Laravel IPGeolocation::getLatitude();
获取经度
$ip->getLongitude(); // Laravel IPGeolocation::getLongitude();
获取城市
$ip->getCity(); // Laravel IPGeolocation::getCity();
获取国家
$ip->getCountry(); // Laravel IPGeolocation::getCountry();
获取国家代码
$ip->getCountryCode(); // Laravel IPGeolocation::getCountryCode();
获取地区
$ip->getRegion(); // Laravel IPGeolocation::getRegion();
获取地区代码
$ip->getRegionCode(); // Laravel IPGeolocation::getRegionCode();
获取邮政编码
$ip->getPostalCode(); // Laravel IPGeolocation::getPostalCode();
获取时区
$ip->getTimezone(); // Laravel IPGeolocation::getTimezone();
获取 isp(不是所有驱动程序都支持)
$ip->getIsp(); // Laravel IPGeolocation::getIsp();
获取所有地理信息
$ip->get(); // returns array // Laravel IPGeolocation::get(); // returns array
获取原始地理信息
$ip->getRaw(); // different drivers will return different data types // Laravel IPGeolocation::getRaw(); // different drivers will return different data types
更新数据库
有一个更新命令可以帮助更新和安装本地的 IP 地理位置数据库。以下命令将下载并安装/更新数据库文件到 /path/to/database.mmdb
。 截至 2019 年 12 月 30 日,Maxmind 要求用户创建账户并使用许可证密钥下载数据库。
<?php use PulkitJalan\IPGeolocation\IPGeolocationUpdater $config = [ 'driver' => 'maxmind_database', 'maxmind_database' => [ 'database' => '/path/to/database.mmdb', 'license_key' => 'YOUR MAXMIND LICENSE KEY' ], ]; (new IPGeolocationUpdater($config))->update();
Laravel
一旦您注册了服务提供程序(支持自动发现),您就可以使用命令 php artisan ip-geolocation:update
服务
IP-API
IP-API 是一个免费(或付费)服务,也可以用来替代数据库文件或付费的 Maxmind 服务。免费服务有一些限制,请在查看 文档 之前先了解一下。
Maxmind
您可以使用MaxMind提供的免费数据库(需要许可证密钥)或他们的网络API服务。您可以在这里注册并获取免费许可证代码。