Определение страны посетителя

Для этой задачи нам понадобится база данных ip адресов по стран. Взять можно тут
http://static.wipmania.com/static/worldip.sql.zip
Распаковываем файл, там нам понадобится worldip.sql
Этот файл занимает 2.6МБ и имеет так называемую жадную вставку, фактически это один sql запрос.
Если честно, у меня еще нигде не получалось залить этот файл за один прием, для этого пришлось писать вот такой скрипт, который разбивает этот дамп на множество запросов.
<?php
 
$dblocation = 'localhost';
$dbname = 'database';
$dbuser = 'user';
$dbpasswd = 'password';
 
$db = new PDO("mysql:host=$dblocation;dbname=$dbname", $dbuser, $dbpasswd,
                array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
 
$db->query("CREATE TABLE IF NOT EXISTS `worldip` (
  `start` int(10) UNSIGNED NOT NULL default '0',
  `end` int(10) UNSIGNED NOT NULL default '0',
  `code` varchar(2) NOT NULL default '',
  PRIMARY KEY (`start`,`end`)
) ENGINE=MyISAM;");
 
$f = fopen('worldip.sql', 'r');
$i = 0;
while ($i < 9) {
    fgets($f);
    $i++;
}
$sql_pre = fgets($f);
 
while (false !== $res = fgets($f)) {
    $sql = $sql_pre . str_replace('),', ')', $res);
    $db->query($sql);
}
?>


Теперь, когда у нас есть база данных, можно получать страну посетителя
<?php
 
$dblocation = 'localhost';
$dbname = 'database';
$dbuser = 'user';
$dbpasswd = 'password';
 
$db = new PDO("mysql:host=$dblocation;dbname=$dbname", $dbuser, $dbpasswd,
                array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
 
//экзаменуемый ip
$ip = '87.250.250.3';
 
$q = $db->prepare("SELECT
worldip.code
FROM
worldip
WHERE INET_ATON(?)
BETWEEN worldip.start AND worldip.`end` LIMIT 1");
$q->execute(array($ip));
$country = $q->fetch();
$country = (isset($country['code'])) ? $country['code'] : '';
echo $country;
?>

Если вы получили в ответе RU, то всё прошло как надо.