netglue/geoip2-helpers

1.0.3 2018-08-21 12:42 UTC

This package is auto-updated.

Last update: 2024-08-29 04:37:22 UTC


README

Latest Stable Version Coverage Status Build Status Maintainability Test Coverage

关于

如果您只想使用 MaxMind 的 GeoLite2 数据库来确定访客的 IP 地址所在的国别以及一些更详细的信息,例如城市(较慢),那么这个库对您很有用。Expressive 和 ZF3 都已经预设了工厂和默认配置。

获取 IP 地址的位置数据依赖于确定客户端的远程地址,因此该库依赖于 netglue/realip-helpers。这仅由中间件使用。

安装

使用 composer 安装 "netglue/geoip2-helpers"

Zend 组件安装程序

获取数据库副本

该软件包附带了一个用于下载免费 GeoLite2 数据库的工具。如果您使用的是付费版本,您可能会将数据库下载到中央位置,因此 MaxMind 的 geoipupdate 可能是更好的工具:https://github.com/maxmind/geoipupdate

使用附带的下载工具

使用 composer 安装后,命令将在 vendor/bin/geoip 中可用。您可以使用 geoip help geoip:download 获取命令的帮助。

没有参数时,该命令将下载城市和国家的数据库到该库的 ./data 目录。要将下载到不同的目录,您应提供目录参数,例如 geoip geoip:download ~/geoip-data/here

文件将使用远程服务器上的文件名,例如 GeoLite2-City.mmdb

如果您只对国家级别信息感兴趣,可以使用 --country 开关关闭下载城市数据库,反之亦然使用 --city。默认情况下,将检索两个数据库。

--no-clobber 开关仅在文件不存在时才执行下载,因此可以在部署期间使用它,例如避免反复下载不需要的东西。

ZF3 控制器插件

在 ZF3 应用中,默认配置公开了一个名为 geoIp 的插件。使用此插件非常直接

$ip = $this->clientIp(); // If you are using the netglue/realip-helpers dependency
if ($ip) {
    $countryCode = $this->geoIp()->countryCode($ip);
    $countryName = $this->geoIp()->countryName($ip);
    $timezone    = $this->geoIp()->timezone($ip); // If you are using the City Database
    $dataArray   = $this->geoIp()->get($ip);
}

PSR-15 中间件

\NetglueGeoIP\Middleware\Geolocation::class 添加到您的管道中,在将包含客户端 IP 的请求属性 ip_address 注入中间件的中间件之后(默认情况下,可以在构造函数中配置)。

后续中间件将可以访问这些属性

  • Geolocation::DATA - 包含数据库中找到的一切的数组(如果有的话)
  • Geolocation::COUNTRY_CODE - 2个字母的 ISO 国家代码
  • Geolocation::COUNTRY_NAME - 根据配置的区域设置的名称
  • Geolocation::TIMEZONE - 如果可用,时区 - 依赖于使用基于城市的数据库。

其他要考虑的内容

这个库可能太狭窄或具体,因此您可能会发现 Geocoder PHP 更成熟,更适合您的需求。这里有一个消耗此库的 PSR-15 中间件:middlewares/geolocation

测试

cd 切换到模块安装的地方,然后执行 composer install,接着执行 composer test

贡献

欢迎提出问题。请为新功能编写测试用例。

支持

欢迎提交问题,但请理解,回答支持请求的时间非常有限,因此可能需要较长时间才能得到回复。

关于

Netglue 在英格兰德文郡制作网站和应用。我们希望这对您有所帮助,无论结果如何,我们都非常欢迎您的反馈 :)