使用ip地址在数据库上查找CIDR并进行关闭匹配

时间:2018-05-03 07:45:00

标签: php mysql geoip geoip2

对于我的系统,我喜欢进行小型国家/地区位置检测。所以我找到了这个数据库: https://github.com/datasets/geoip2

有以下值:

network,geoname_id,continent_code,continent_name,country_iso_code,country_name,is_anonymous_proxy,is_satellite_provider
"41.74.160.0/20","49518","AF","Africa","RW","Rwanda","0","0"
"41.77.160.0/22","49518","AF","Africa","RW","Rwanda","0","0"

如果我从我的ip getenv函数获得了像42.76.160.0这样的ip地址,我怎样才能用php& pdo匹配数据库中的正确值。

修改
同时我找到了一个解决方案:
我将cidr转换为普通的ip地址,并执行以下查找:

            SELECT `country_iso_code`, `country_name`
            FROM `GeoIP`
            WHERE inet_aton(network) <= inet_aton(:ipadress)
            ORDER BY inet_aton(network) DESC
            LIMIT 1

在我的服务器上,我还可以获得大约50-75ms的内容加载,但这只是我网站的一小部分。 (设置已经应用inet_aton的表没有多大区别)

0 个答案:

没有答案