shlinkio / shlink-ip-geolocation
Shlink 模块,包含使用不同策略定位 IP 地址的工具。
v4.0.0
2024-03-09 08:19 UTC
Requires
- php: ^8.2
- fig/http-message-util: ^1.1
- geoip2/geoip2: ^3.0
- guzzlehttp/guzzle: ^7.8
- shlinkio/shlink-config: ^3.0 || ^2.5
- symfony/filesystem: ^7.0 || ^6.4
Requires (Dev)
- devster/ubench: ^2.1
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^11.0
- roave/security-advisories: dev-master
- shlinkio/php-coding-standard: ~2.3.0
- symfony/var-dumper: ^7.0 || ^6.4
README
Shlink 模块,包含使用不同策略定位 IP 地址的工具。
它提供的大部分元素都需要一个 PSR-11 容器,并且由于它包含的 ConfigProvider
,在 mezzio 应用程序中易于集成。
安装
使用 composer 安装此库
composer require shlinkio/shlink-ip-geolocation
此库也是一个表达式的模块,它提供了自己的
ConfigProvider
。将其添加到您的配置中,以自动设置所有内容。
解析 IP 位置
此模块提供了一些解析 IP 地址位置的不同方法,所有这些方法都实现了 Shlinkio\Shlink\IpGeolocation\Resolver\IpLocationResolverInterface
。
该接口基本暴露了这个方法
/** * @throws WrongIpException */ public function resolveIpLocation(string $ipAddress): Model\Location;
实现此接口的策略如下
GeoLite2LocationResolver
:它使用 GeoLite2 数据库解析 IP 地址位置。EmptyIpLocationResolver
:这是一个虚拟解析器,它始终返回一个空位置,好像它不能解析地址位置一样。CainIpLocationResolver
:它包装了一个 IP 解析器列表,并按顺序调用它们,直到其中一个能够解析地址位置。
第一个是最可靠的,但需要最新的 GeoLite2 数据库(处理方法将在下一节中解释)。
然而,链解析器将其他两个按列表中的顺序封装起来,是推荐使用的。
它被别名为名为 Shlinkio\Shlink\IpGeolocation\Resolver\IpLocationResolverInterface
的服务。
处理 GeoLite2 数据库文件
为了使用 GeoLite2LocationResolver
解析 IP 地址位置,需要一个最新的本地 GeoLite2 数据库文件。
为了简化此文件的管理,提供了一个 Shlinkio\Shlink\IpGeolocation\GeoLite2\DbUpdater
服务。
它公开了两个公共方法
public function databaseFileExists(): bool; /** * @throws RuntimeException */ public function downloadFreshCopy(?callable $handleProgress = null): void;
databaseFileExists
:只告诉数据库文件是否已经存在(无论是有过时的还是最新的形式)。downloadFreshCopy
:强制从 MaxMind 仓库下载新的 GeoLite2 数据库副本。它允许可选地处理下载进度。
GeoLite2 配置
为了使解析器和数据库更新器都能工作,必须定义此配置
<?php declare(strict_types=1); return [ 'geolite2' => [ // Mandatory options 'db_location' => __DIR__ . '/../../data/GeoLite2-City.mmdb', 'temp_dir' => sys_get_temp_dir(), // Optional options 'license_key' => 'kjhk45hkj34fdwe5', // If not set, no attempts to download the file will happen ], ];
db_location
:告诉数据库文件在哪里在本地文件系统中(或在DbUpdater
下载后应该位于哪里)。temp_dir
:一个临时位置,在下载新版本的数据库时,新版本的数据库名位于此位置。一旦下载成功,新数据库将被移动到前一个配置选项中定义的位置。license_key
:用于下载数据库的 GeoLite 许可证密钥。了解如何 生成自己的密钥。
此项目包含由 MaxMind 创建的 GeoLite2 数据,可在 https://www.maxmind.com 获取