为了基于上面的集成轻松支持 IPv6->国家代码并且没有不必要的文件:
获取最新旧版 IPv6 数据的副本(我假设您已经拥有 IPv4 二进制文件):
wget http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz
解压缩并将其移动到您的 Web 服务器可访问的目录:
gunzip GeoIPv6.dat
mv GeoIPv6.dat /etc/usr/share/GeoIP/GeoIPv6.dat
从 Maxmind git 目录中获取 geoip.inc 的副本(https://github.com/maxmind/geoip-api-php/blob/master/src/geoip.inc https://github.com/maxmind/geoip-api-php/blob/master/src/geoip.inc)并将其保存在您可以在任何需要运行 geoip 的地方访问的地方。
如果您像我一样安装了 php5-geoip,请使用以下命令将其删除sudo apt-get remove php5-geoip
;根据需要进行净化。
完成上述操作后,您现在可以测试 v4 或 v6 的传入 IP 地址并获得适当的结果。
Example:
<?php
include_once('geoip.inc');
//set an IPv6 address for testing
$ip='2601:8:be00:cf20:ca60:ff:fe09:35b5';
/*
test if $ip is v4 or v6 and assign appropriate .dat file in $gi
run appropriate function geoip_country_code_by_addr() vs geoip_country_code_by_addr_v6()
*/
if((strpos($ip, ":") === false)) {
//ipv4
$gi = geoip_open("/usr/share/GeoIP/GeoIP1.dat",GEOIP_STANDARD);
$country = geoip_country_code_by_addr($gi, $ip);
}
else {
//ipv6
$gi = geoip_open("/usr/share/GeoIP/GeoIPv6.dat",GEOIP_STANDARD);
$country = geoip_country_code_by_addr_v6($gi, $ip);
}
echo $ip . "<br>" . $country;
这是专门针对国家/地区的,但可以轻松复制用于城市数据。