hibit-dev/geodetect

基于用户IP地址自动检测用户地理位置数据

v2.13.0 2024-09-25 15:38 UTC

This package is auto-updated.

Last update: 2024-09-25 15:39:52 UTC


README

Automatically detect user's geo data based on their IP address

GitHub Actions Workflow Status GitHub License Packagist Version Packagist Downloads Tests Coverage

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)。有关更多信息,请参阅许可证文件