netglue / geoip2-helpers
Requires
- php: >=7.1
- ext-json: *
- ext-zlib: *
- maxmind-db/reader: ^1
- netglue/realip-helpers: ^1.0
- psr/container: ^1.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- symfony/console: ^4.1
- zendframework/zend-http: ^2
Requires (Dev)
- maxmind/geoip-test-data: dev-master
- php-coveralls/php-coveralls: ^2
- phpstan/phpstan: ^0
- phpunit/phpunit: ^7
- squizlabs/php_codesniffer: ^3
- zendframework/zend-diactoros: ^1.8
- zendframework/zend-modulemanager: ^2.8
- zendframework/zend-mvc: ^3.1
Suggests
- zendframework/zend-mvc: Install Zend-MVC in order to use this with a ZF3 app
This package is auto-updated.
Last update: 2024-08-29 04:37:22 UTC
README
关于
如果您只想使用 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 在英格兰德文郡制作网站和应用。我们希望这对您有所帮助,无论结果如何,我们都非常欢迎您的反馈 :)