http://www.maxmind.com/app/geolitecountryからcsvgeoipliteをダウンロードしました。そのデータを次のテーブルとしてデータベースにインポートしました。
ブロック:startIP、endIP、locid。場所:locid、country、region、city、postalcode、lat、long、met、areacode。
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)
IPが69.63.184.142の場合、ipnumは1161803918に等しくなります。dbはクエリを返しますが、場所はオーストラリアからのものであり、そのIPはオーストラリアではありません。
geoipに精通している人は、数式に関する限り、それは私が間違っていることですか?