<?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; // федеральный округ РФ
?>
Подробнее про возвращаемые значения.
Комментарии
ругается...
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);
выдает следующее:
Вместо 99.99.99.999 - ip-адрес сервера где расположен сайт
Написал что не нашел город по ip
Так разве он должен туда поставлять ip сервера, а не ip-адрес машины, с которой зашли на сайт?
$_SERVER['REMOTE_ADDR'] ip адрес удаленного хоста тоесть вашей машины, если вы на локалхосте пытаетесь то там будет подставляться 127.0.0.1
Не работает, выдает чистый лист.
Спасибо за функцию, все работает
(у меня тоже был по началу белый лист, это потому, что сервис не может определить местоположение, $_SERVER['REMOTE_ADDR'] почему то возвращает адрес сервера сайта)
нужно использовать вот этот метод для получения ip адреса
Вот простой способ получения геолокации для 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-адресов берётся из кеша сохранённого на Вашем хостинге.
Добавить комментарий