xandeadx.ru Блог музицирующего веб-девелопера

PHP → Получаем город по IP адресу с помощью сервиса IpGeobase

Опубликовано в
<?php
 
/**
 * Возвращает информация об IP адресе
 */
function get_ip_info($ip)
{
    $postData = "
        <ipquery>
            <fields>
                <all/>
            </fields>
            <ip-list>
                <ip>$ip</ip>
            </ip-list>
        </ipquery>
    "; 
 
    $curl = curl_init(); 
 
    curl_setopt($curl, CURLOPT_URL, 'http://194.85.91.253:8090/geo/geo.html'); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postData); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
 
    $responseXml = curl_exec($curl);
    curl_close($curl);
 
    if (substr($responseXml, 0, 5) == '<?xml')
    {
        $ipinfo = new SimpleXMLElement($responseXml);
        return $ipinfo->ip;
    }
 
    return false;
}
 
// пример использования
$ipinfo = get_ip_info($_SERVER['REMOTE_ADDR']);
echo $ipinfo->city; // город
echo $ipinfo->region; // регион
echo $ipinfo->district; // федеральный округ РФ
 
?>

Подробнее про возвращаемые значения.

Похожие записи

Комментарии RSS

ругается...
Fatal error: Call to undefined function curl_init() on line 19

нужно установить curl

Спасибо за оч быстрый ответ!
А если это хостинг, к примеру nichost, он это умеет?!

если nichost это hosting.nic.ru, то да

Интересно, а можно просто сделать блок на странице через ajax в бэке послать запрос на этот сервер, а потом ответ через ajax скормить в drupal, а тот в кэше запомнит ассоциацию ip и города. При запросе следующей странице сайта, уже будет отображен город без всякого запроса к примеру, и хранение кэша поставить месяц к примеру.

можно, только применения не вижу

Например для тех у кого нет поддержки curl на хостинге, да и скрипт не будет этого делать, за минусом будет только то, что если javascript у клиента отключить, тогда это вообще работать не будет :D

А часовой пояс можно отсюда вытащить, чтобы сделать поправку на время клиента?

Часовой пояс клиента можно javascript функцией взять пример здесь http://www.w3schools.com/jsref/jsref_gettimezoneoffset.asp

Вставляю код в блок с php-фильтром, но ничего не выводится... Или эта инструкция не работает в Drupal 7?

Var_dump что говорит?

var_dump($ipinfo);
выдает следующее:

object(SimpleXMLElement)#96 (2) {
  ["@attributes"]=> array(1) {
    ["value"]=> string(12) "99.99.99.999"
  }
  ["message"]=> string(9) "Not found" 
}

Вместо 99.99.99.999 - ip-адрес сервера где расположен сайт

Написал что не нашел город по ip

Так разве он должен туда поставлять ip сервера, а не ip-адрес машины, с которой зашли на сайт?

$_SERVER['REMOTE_ADDR'] ip адрес удаленного хоста тоесть вашей машины, если вы на локалхосте пытаетесь то там будет подставляться 127.0.0.1

Не работает, выдает чистый лист.

Спасибо за функцию, все работает
(у меня тоже был по началу белый лист, это потому, что сервис не может определить местоположение, $_SERVER['REMOTE_ADDR'] почему то возвращает адрес сервера сайта)
нужно использовать вот этот метод для получения ip адреса

function GetRealIp()
{
 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;
}

Работает. Благодарю.

Прошу прощения, но вы вообще сами проверяете код который выкладываете? С коробки не работает. Скопировал код 1 к 1, функция возвращает false.

нормально работает

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании