我已经从http://www.maxmind.com/app/geolitecountry下载了 csv geoip lite 。我将该数据导入到我的数据库中,如下表所示:
块:startIP、endIP、locid。位置:locid、国家、地区、城市、邮政编码、lat、long、met、区号。
创建 IPnum 的代码是:
<? $ip =$_SERVER['REMOTE_ADDR'];
list($w, $x, $y, $z) = explode('.', $ip);
$one = 16777216* $w;
$two = 65536* $x ;
$three = 256*$y;
$ipnum = $one + $two+ $three + $z;
?>
那么我的查询是:
SELECT postalcode FROM location WHERE locid =(SELECT locid FROM blocks WHERE startIP <= '$ipnum' AND endIP>= '$ipnum' LIMIT 1)
对于 69.63.184.142 的 IP,ipnum 等于 1161803918。db 确实返回了查询,但是,该位置来自澳大利亚,并且该 ip 绝对不在澳大利亚。
那些熟悉geoip的人,就公式而言,我做错了什么吗?