Достаточно часто требуется с входящего IP адреса клиента определить страну на лету.
Это требуется как для финансовых так и для простых новостных сервисов или порталов.
Самих сервисов IP2Country достаточно много, также в сети имеются базы данных стран и их диапазоны IP адресов.
Ниже представлена функция парсинга одного из сервисов. На вход поступает IP, на выходе английское наименование страны:
public function ipToCountry($ip)
{
if (!preg_match("/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/",$ip))
exit('Входящие данные не соответсвуют требованиям, операция отменена');
ini_set('user_agent', 'Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0');
$html = @file_get_contents("http://ip2geolocation.com/?ip=".$ip);
if ($html){
$html = iconv ("windows-1251","utf-8",$html);
$pos = strpos($html, 'Страна');
$html = substr($html, $pos);
$pos = strpos($html, '">');
$html = substr($html, 0, $pos);
$html = str_replace("Страна: ","",$html);
$html = str_replace(",","",$html);
// убираем лишние строки при помощи разделения слов по пробелам
// нужно чтобы не попадалось в ответ слова типа Russian Federation,Region:Ufa и тд.
$text = explode(" ",$html);
if ($text[0]=="Russian" || $text[0]=="United" ){
$html=$text[0]." ".$text[1]; // Россия т.к великая держава состоит из 2 слов ну или там US или UK
}
else
$html=$text[0];
return trim($html);
}
else{
return "unknown";
}
}