Функция IP to Сountry на PHP

Достаточно часто требуется с входящего 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";
		}

}

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *