Php geoip邮政编码查询

Php geoip邮政编码查询,php,mysql,geoip,Php,Mysql,Geoip,我已从下载了csv geoip lite。 我将该数据导入数据库,如下表所示: 区块: 星端, 恩迪普, 洛西德。 地点: 洛西德, 国 区域 城市 后代码, 拉特, 长的 遇见, 区号 创建IPnum的代码是: <? $ip =$_SERVER['REMOTE_ADDR']; list($w, $x, $y, $z) = explode('.', $ip); $one = 16777216* $w; $two = 65536* $x

我已从下载了csv geoip lite。 我将该数据导入数据库,如下表所示:

区块: 星端, 恩迪普, 洛西德。 地点: 洛西德, 国 区域 城市 后代码, 拉特, 长的 遇见, 区号

创建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的人,就公式而言,是我做错了什么吗?

这里有一个我使用的公式。如果它没有获取get变量,它将使用用户的远程地址

<?php
if(!empty($_GET['ip'])){
if(preg_match('!^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$!',$_GET['ip'])){
    $ip_address=$_GET['ip'];    
} else {
    print ("invalid ip address");   
}
} else {
$ip_address=$_SERVER['REMOTE_ADDR'];    
}
$test = file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip_address);
$test = unserialize($test);
print "<html><pre>";
print_r ($test);
print "</pre></html>";
?>

我不熟悉geoip,但有一件事我曾经偶然发现,IP地址按网络顺序排列,而我预期它们按主机顺序排列。这只是一个猜测,但你可能想试试。只需颠倒字节顺序,$z*16777216,$y*65536,……只是尝试了一下,谢谢你的建议,但仍然没有,我对GeoIP了解不多,但我认为你只是以艰难的方式实现了PHP的内置函数:哈哈,我在编写了这个脚本{facepalm}之后找到了这个函数有一件事-在对SQL查询进行参数替换后,是否可以打印出SQL查询?也许有什么东西正在将$ipnum格式化为有符号的数字,或者其他什么东西。