Я использую 2 функции в своих проектах для геолокации.
get_ip() - выдает ip клиента,
get_region() - выдает область по заданному ip. Можно переделать чтобы выдавал город.
$xml = simplexml_load_file('
ipgeobase.ru:7020/geo?ip=' . $ip);
этой строчкой мы получаем всю информацию о клиенте по ip.
Через объект $xml можно получить и город
function get_ip() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
function get_region($ip = '', $to = 'utf-8') {
$ip = ($ip) ? $ip : $_SERVER['REMOTE_ADDR'];
$xml = simplexml_load_file('http://ipgeobase.ru:7020/geo?ip=' . $ip);
//print_R($xml);
if ($xml->ip->message) {
if ($to == 'utf-8') {
return $xml->ip->message;
} else {
if (function_exists('iconv'))
return iconv("UTF-8", $to . "//IGNORE", $xml->ip->message);
else
return "The library iconv is not supported by your server";
}
} else {
if ($to == 'utf-8') {
if (!empty($xml->ip->region))
return $xml->ip->region;
else
return $xml->ip->country;
} else {
if (function_exists('iconv'))
return iconv("UTF-8", $to . "//IGNORE", $xml->ip->region);
else
return "The library iconv is not supported by your server";
}
}
}