hibit-dev / geodetect
基于用户IP地址自动检测用户地理位置数据
Requires
- php: >=8.1
- geoip2/geoip2: ^3.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^4.8|^5.5|^6.5|^9.4|^10.0|^11.0
README
GeoDetect: 基于IP的国家检测
GeoDetect 是一个与框架无关的 PHP 包,允许您轻松地从 IP 地址中提取有价值的国家信息。该包由一个强大且更新的 IP 地理位置数据库提供支持,提供准确的结果并确保可靠的性能。通过将 GeoDetect 集成到您的 PHP 应用程序中,开发人员可以轻松实现地理位置功能,而无需构建和维护自己的 IP 地理位置数据库。
安装
使用 composer require
安装 GeoDetect
composer require hibit-dev/geodetect
用法
安装完成后,将 GeoDetect 包包含到您的类中
use Hibit\GeoDetect;
实例化类或使用依赖注入
$geoDetect = new GeoDetect();
提供用户IP地址以检索国家记录
$country = $geoDetect->getCountry('XXX.XXX.XXX.XXX');
最后,使用可用的辅助工具检索所需的国家信息
$country->getGeonameId(); $country->getIsoCode(); $country->getName(); $country->isInEuropeanUnion();
自托管数据库
该包在后台使用 MaxMind 的数据库,该数据库定期更新以确保数据的准确性。然而,您也可以选择通过指定 DB 文件位置使用自托管的数据库
$country = $geoDetect->setCountriesDatabase('location_to_db_file') ->getCountry('XXX.XXX.XXX.XXX');
该包包括 MaxMind 2024-09-24 的数据库
打印用户国旗
GeoDetect 包提供轻松显示用户国旗的功能。只需创建一个图像 HTML 标签,并根据国家的 ISO2 代码插入相应的图像源
<img alt="Country: FR" src="{{Hibit\GeoDetect::getFlagByIsoCode('FR')}}">
默认情况下,生成的国旗高度为 20px,宽度通常在 30px 左右。
大小可以调整,如果需要,还可以替换为 SVG 图像。要更改格式,getFlagByIsoCode 方法需要提供第二个参数
Hibit\GeoDetect::getFlagByIsoCode('FR', Hibit\Flag\Format::SVG) // SVG format Hibit\GeoDetect::getFlagByIsoCode('FR', Hibit\Flag\Format::H20) // Height: 20px Width: ~30px Hibit\GeoDetect::getFlagByIsoCode('FR', Hibit\Flag\Format::H24) // Height: 24px Width: ~36px Hibit\GeoDetect::getFlagByIsoCode('FR', Hibit\Flag\Format::W20) // Width: 20px Height: ~13px Hibit\GeoDetect::getFlagByIsoCode('FR', Hibit\Flag\Format::W40) // Width: 40px Height: ~26px
注意:FR 用于说明;通过国家记录的 getIsoCode 方法获取国家代码。或者,如果已从其他来源获得,可以使用国家的 2 位 ISO 代码。
Laravel 中的实现
为了方便测试,我们将在 Laravel 应用程序中创建一个新的路由。在 routes/web.php 文件中添加了一个名为 get-country 的新路由。当访问此路由时,它将以 JSON 格式返回所有可用信息。
Route::get('/get-country', function (Illuminate\Http\Request $request) { $geoDetect = new Hibit\GeoDetect(); $country = $geoDetect->getCountry($request->getClientIp()); return response()->json([ 'geonameId' => $country->getGeonameId(), 'isoCode' => $country->getIsoCode(), 'name' => $country->getName(), 'isInEuropeanUnion' => $country->isInEuropeanUnion(), ]); });
请注意,在本地测试国家检测功能时,可能不会按预期工作。这是因为请求实例中的客户端 IP 地址通常设置为 localhost (127.0.0.1)。在测试本地开发环境中的国家检测功能时,请记住这一点。
国家名称翻译
该包配置了发现选项,以启用 Laravel 自动识别和发布必要的翻译。您可以在 /lang/en/geodetect.php 文件中找到翻译,并且可以根据需要随意修改翻译。如果文件不存在,请手动发布它们,执行以下命令
php artisan vendor:publish --tag=hibit-geodetect
一旦翻译已发布,您就可以使用它们在任何 blade 文件中使用翻译指令显示国家名称
@lang('geodetect.ES') //Output: Spain
或者,可以在 blades 外使用以下语法
__('geodetect.ES') //Output: Spain
文档
说明和完整文档始终可在 HiBit 上找到。
有关此存储库的更多信息,请在此处查看
安全
如果您发现任何安全相关的问题,请通过电子邮件security@hibit.dev联系,而不是使用问题跟踪器。
关于HiBit
HiBit不仅仅是一个博客;它是您获取与开发、IT以及电子奇观相关所有信息的首选空间。专为开发者、IT爱好者以及电子爱好者设计,HiBit是一个充满活力的中心,通过提供新鲜有趣的内容,让您保持最新动态。
探索一系列文章、教程和洞察,鼓励一个充满活力的社区,在这里阅读、评论、讨论和分享经验不仅受到鼓励,而且备受推崇。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。