Geoip IP Detect 使用 php 和 mysql 数据库

Posted

技术标签:

【中文标题】Geoip IP Detect 使用 php 和 mysql 数据库【英文标题】:Geoip IP Detect using php and mysql database 【发布时间】:2015-10-12 15:22:28 【问题描述】:

我正在使用 Maxmind 检测 IP 地址并在 php 中显示国家代码、国家名称和城市名称。 我可以通过 GeoIP.dat、geoip.inc、geoipcity.inc 等显示以上信息

我已将 GeoIPCountryWhois.csv 插入到我的 sql 数据库中,

$mysqli->query('DROP TABLE ip2country'); $sql=" CREATE TABLE ip2country (ip_string_lo VARCHAR(16)  NOT NULL, ip_string_hi VARCHAR(16)  NOT NULL, ip_number_lo INT UNSIGNED NOT NULL, ip_number_hi INT UNSIGNED NOT NULL, country_code VARCHAR(2)   NOT NULL, country_name VARCHAR(64)  NOT NULL)";

您能告诉我如何使用我的数据库显示 IP 信息吗? 谢谢

【问题讨论】:

【参考方案1】:

Maxmind 数据库是平衡二叉树。它非常快。然而,将它放在 MySQL 中有时会使其更快。您需要从 Maxmind 获取 CSV 版本,最简单的方法是创建与 CSV 相同的结构。

然后你需要将IP地址转换为数字-PHP和MySQL都有这个功能。

最后你执行简单的 SQL 并获取行。 Maxmind CSV 有 IP 地址块,并给 youvfirst 和 last IP 地址作为 int。您的 IP 必须在块“内部”,例如MySQL '之间'。

我个人建议将 GeoIP 放在 Redis 中,因为这样会更快。


更新

这是我几年前所做的:

https://github.com/nmmmnu/GeoIP-Redis

我不是 100% 确定,如果导入仍然按原样工作,但经过一些调整,它将能够导入数据。

目前,我正在使用 nginx 模块,它会自动执行所有这些操作,并在 HTTP 请求中给我一个标头。

因为这是完全不同的方法,您可以检查该解决方案或打开新问题并与我联系,以便我在那里回答。

【讨论】:

分享一个通过php导入redis的高效例子? 我正在更新答案

以上是关于Geoip IP Detect 使用 php 和 mysql 数据库的主要内容,如果未能解决你的问题,请参考以下文章

php maxmind geoip 异常ip

PHP - 打印 GeoIP 数组

如何使用php获取域的托管IP和国家名称

nginx 和 PHP GeoIP 模块的内部错误 500

为什么geoip不适合我

Laravel 创建自己的 Facade 扩展 geoip 根据 IP 获取国家地域城市信息