【发布时间】:2015-05-07 23:11:07
【问题描述】:
我按照以下相同的步骤设置了 geoip (http://php.net/manual/en/geoip.setup.php):
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
sudo apt-get install php5-geoip
这非常有效,并且已经使用 IPv4 地址数年了。然而,我没有意识到传入的 IPv6 设备有多糟糕。例如,它返回Notice: geoip_country_code_by_name(): Host 26xx:8:xx00:cf20:caxx:ff:fexx:35b5 not found
我经历了很多试图让它正常工作的事情,包括:
- 测试v6地址并使用
geoip_open("/usr/share/GeoIP/GeoIPv6.dat", GEOIP_STANDARD);
显然 geoip_open 不是一个可用的函数 ala php5-geoip
- 我尝试过使用
geoip_country_code_by_name_v6($ip)
这是另一个不可用的功能,即使 geoip_country_code_by_name($ip) 效果很好。
- 我尝试通过来自https://github.com/maxmind/geoip-api-php/blob/master/src/geoip.inc 的 geoip.inc 文件包含缺少的函数
目前无济于事。
有什么方法可以让我轻松地在我的 PHP 代码中选择我想要使用的数据库,以便我可以简单地测试它是 IPv4 还是 IPv6 地址并加载适当的数据库?
【问题讨论】:
-
确保您使用的是
GeoLite2。旧版产品不支持 IPv6。 -
@Barmar 如果我理解正确,Geolite2 二进制文件不是 .dat 文件,因此无法与我当前与 PHP 的集成一起使用。我确实有旧版 IPv6 dat 文件,但据我所知,我无法通过我的 PHP 代码指明要查找哪个 .dat 文件。
-
对不起,我不知道集成过程。