запрос почтового индекса - PullRequest
       6

запрос почтового индекса

1 голос
/ 03 февраля 2011

Я скачал CSV Geoip Lite с http://www.maxmind.com/app/geolitecountry. Я импортировал эти данные в свою базу данных в виде следующих таблиц:

Блоки: startIP, endIP, locid. Место нахождения: locid, страна, область, край, Город, Почтовый индекс, лат, долго, встретились, 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, я что-то не так делаю с формулой?

1 Ответ

0 голосов
/ 23 марта 2013

Вот тот, который я использую.Если он не получает GET-переменную, он использует удаленный адрес пользователя.

<code><?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 "
";?>
...