Я загрузил CSV-файл GeoIP lite с сайта http://www.maxmind.com/app/geolitecountry. . Я импортировал эти данные в свою базу данных в виде следующих таблиц:
Блоки: startIP, endIP, locid. Местоположение: locid, страна, регион, город, почтовый индекс, 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. База данных возвращает запрос, однако местоположение находится в Австралии, и этот IP-адрес определенно не в Австралии.
те, кто знаком с geoip, это что-то, что я делаю неправильно, насколько формула идет?
$ipnum
. Я не совсем ошибаюсь, вы должны удалить их, так как$ipnum
- это числовой тип данных. - person Patrick Echterbruch   schedule 03.02.2011SELECT locid FROM blocks WHERE...
без лимита? - person Matt Gibson   schedule 04.02.2011