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 数据库的主要内容,如果未能解决你的问题,请参考以下文章