pier-infor / geoliteip
Pier-Infor Geoliteip.
1.0.2
2019-11-08 12:13 UTC
Requires
- php: ^7.0
- geoip2/geoip2: ~2.0
Requires (Dev)
- phpunit/phpunit: ^6.5
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2024-09-09 00:22:07 UTC
README
Geoliteip 是一个 php 工具,用于使用和管理 MaxMind GeoLite2 免费数据库(mmdb 格式)。
🌊 特性
- 使用 3 个免费数据库:asn、国家、城市。
- 动态更改数据库,无需重新实例化。
- 从纯文本文件输入 IP 列表。
- 输出为数组、json、csv。
- 动态更新数据库或通过 composer。
👍 优点
- 使用工厂/适配器模式实现灵活性和可扩展性。
- 注释并全面测试。
- 通过覆盖/添加适配器可以简单地更改行为。
- 所有常量类均集中位于 src/Interfaces 中,可以覆盖;
👎 缺点
- 不使用非免费的 GeoLite 数据库(但可以扩展以完成任务)。
👷 依赖
- geoip2/geoip2
😇 测试 & 覆盖率
- 在运行测试之前安装数据库,执行以下操作:
composer run db
- 需要 xdebug 以启用覆盖率。
- 所有测试通过,PHP 版本 >= 7.0。
- /!\ 更新器测试会从 MaxMind 进行真实数据库更新,滥用会导致 503 错误。
Composer
设施运行
- db(下载并安装 assets db 中的数据库)。
- test(通过所有测试)。
- coverage(通过所有测试并带有覆盖率)。
- testIp(仅运行 IpTest)。
- testDownloader(仅运行 DownloaderTest)。
- testFileManager(仅运行 FileManagerTest)。
- testUpdater(仅运行 UpdaterTest)。
- lint(检查并修复源代码错误)。
集成
最佳方式是使用 composer
composer require pier-infor/geoliteip
要集成 postInstall 进程,请按以下方式调整您的 composer.json。
"scripts": { ... "post-install-cmd": [ ... "PierInfor\\GeoLite\\Installer::postInstall" ] }
虚拟应用程序
从项目根目录创建一个 src 文件夹,然后在其中创建一个名为 app.php 的文件。
将以下代码复制粘贴到 app.php 中
<?php namespace Company\MyApp; use PierInfor\GeoLite\Ip; error_reporting(E_ALL); ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('date.timezone', 'Europe/Paris'); ini_set('register_globals', 0); ini_set('opcache.enable', 0); if (function_exists('opcache_get_configuration')) { ini_set('opcache.memory_consumption', 128); ini_set('opcache.load_comments', true); } require_once 'vendor/autoload.php'; $geoInst = new Ip(); $forceUpdate = false; echo 'Begin update @' . microtime(true) . "\n"; $geoInst ->setAdapter(Ip::ADAPTER_ASN)->update($forceUpdate) ->setAdapter(Ip::ADAPTER_COUNTRY)->update($forceUpdate) ->setAdapter(Ip::ADAPTER_CITY)->update($forceUpdate); echo 'End update @' . microtime(true) . "\n"; $ipv6ToCheck = '2a01:e35:2422:4d60:2ad2:44ff:fe06:2983'; $ipv4ToCheck = '82.66.36.214'; echo 'Scanning ipv6 ' . $ipv6ToCheck . "\n"; echo 'Scanning ipv4 ' . $ipv4ToCheck . "\n"; $geoInst->addIp($ipv6ToCheck); $geoInst->addIp($ipv4ToCheck); echo $geoInst->process()->toJson(); unset($geoInst);
从项目根目录运行
php ./src/app.php
应该立即无错误显示以下消息
Begin update @1568318808.9869 End update @1568318808.9871 Scanning ipv6 2a01:e35:2422:4d60:2ad2:44ff:fe06:2983 Scanning ipv4 82.66.36.214 [ { "ip": "2a01:e35:2422:4d60:2ad2:44ff:fe06:2983", "country": "FR", "city": "?", "lon": 48.85, "lat": 2.5, "radius": 10 }, { "ip": "82.66.36.214", "country": "FR", "city": "Aubervilliers", "lon": 48.9163, "lat": 2.3869, "radius": 5 } ]
将 forceUpdate 设置为 true 将在静默模式下强制更新。
您可以通过将 ipv4 更改为 ipv6 来检查同一位置的准确性。
🐹 待办事项
- 实现输入参数以读取 stdin。
- 找到一个好的 php 文档生成器...