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, то всё прошло как надо.