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

18.12.2009
<?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; // федеральный округ РФ

?>

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

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

Комментарии

Гость
01.07.2010, 11:38

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

Гость
01.07.2010, 12:24

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

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

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

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

Роман
19.12.2012, 12:47

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

Антон
15.11.2013, 13:44

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

Антон
15.11.2013, 18:10

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-адрес сервера где расположен сайт

Гость
15.11.2013, 19:44

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

Антон
15.11.2013, 20:22

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

Гость
16.11.2013, 05:19

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

Дмитрий
26.11.2015, 22:55

Спасибо за функцию, все работает
(у меня тоже был по началу белый лист, это потому, что сервис не может определить местоположение, $_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;
}
Евгений
01.06.2022, 11:51

Вот простой способ получения геолокации для CMS Joomla, Wordpress, Bitrix:
require_once("nikolaevevgeGeoIpNew.php");
$nikolaevevgeGeoIp = new nikolaevevgeGeoIp;
var_dump($nikolaevevgeGeoIp->get());//В этот метод Вы так же можете передать нужный IP-адрес в виде строки для получения его гео-информации например так ...->get("88.85.172.134");

Библиотека отличается от некоторых аналогов тем, что она забирает данные с собственного API-сервиса, а затем кеширует их на Вашем сайте, причём для этого на упомянутых CMS никаких настроек можно не делать. Таким образом с этой библиотекой у Вас не будет необходимости актуализировать geo-базу, поскольку библиотека поддерживает её в актуальном состоянии, а так же Вы не будите создавать значительной нагрузки на API-сервис, поскольку информация о ранее полученных стеках IP-адресов берётся из кеша сохранённого на Вашем хостинге.

Добавить комментарий