shlinkio/shlink-ip-geolocation

Shlink 模块,包含使用不同策略定位 IP 地址的工具。

v4.0.0 2024-03-09 08:19 UTC

This package is auto-updated.

Last update: 2024-09-04 11:47:06 UTC


README

Shlink 模块,包含使用不同策略定位 IP 地址的工具。

它提供的大部分元素都需要一个 PSR-11 容器,并且由于它包含的 ConfigProvider,在 mezzio 应用程序中易于集成。

Build Status Code Coverage Latest Stable Version License Paypal donate

安装

使用 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 获取