Geo IP конвертер

Добрый день! Хоть я и очень запарился, делая PinkContext и времени у меня уже нет, я все же собрался с мыслями, сел и написал этот пост.

Как я и обещал, сегодня я пишу о том, как сконвертировать GeoIP базу от MaxMind и как ей потом пользоваться. Итак, сразу к делу, вот листинг конвертера:

require_once("config.php");
$file = fopen("GeoIPCountryWhois.csv", "r");
flock($file, 1);
$i = 0;
while (!feof($file))
{
	$mass = fgetcsv($file, 1024);
	$begin[$i] = $mass[2];
	$end[$i] = $mass[3];
	$code[$i] = $mass[4];
	$i++;
}
$geoquery = mysql_query("SELECT * FROM `geoip`");
$c = mysql_num_rows($geoquery);
for ($i = $c; > count($begin); $i++)
{
	mysql_query("INSERT INTO `geoip` VALUES ('".$begin[$i]."', '".$end[$i]."', '".$code[$i]."')");
}
flock($file, 3);
fclose($file);
if ($i == count($begin)) echo "Завершено";

А теперь опишу как же все это работает. Во-первых, подключаемся к базе данных, используя общий файл настроек — config.php. Затем открываем файл базы и пока не дойдем до конца считываем его циклом в массив. После этого смотрим, сколько уже записей в базе (на случай, если с первого раза база не сконвертировалась полностью из-за ограничений на время исполнения) и начиная с места последней записи вставляем новые значения.

В итоге, когда скрипт полностью завершит свою работу, он выведет «Завершено».

Как же использовать эту базу? Для определения страны с ее помощью я сделал небольшую функцию:

function geoip($ip)
{
$params = explode(".", $ip);
$adr = 16777216*$params[0] + 65536*$params[1] + 256*$params[2] + $params[3];
$query = mysql_query("SELECT * FROM `geoip` WHERE '".$adr."' BETWEEN `begin` AND `end` LIMIT 1");
if (mysql_num_rows($query))	$code = mysql_result($query, 0, "code"); else $code = "";
return $code;
}

Как видно, ей передается IP адрес и на выходе она возвращает код страны (если ничего не найдено результат — пустая строка). Вот и все, база готова  использованию…

Подошел к концу десятый пост моего блога. Желаю вам и себе удачи во всех начинаниях!

P.S. После пятидесятой записи всех ждет полезный сюрприз

    • Alexey
    • Август 6th, 2010 10:24пп

    Сколько стоила разработка PinkContext?

      • admin
      • Август 6th, 2010 10:32пп

      Разработка еще не до конца завершена, однако полная стоимость равна 500$

  1. Круто!

  1. Трэкбэков пока нет.