К основному контенту

Как получить страну по IP-адресу в PHP

Иногда требуется определить на сайте с какой страны и города пришёл посетитель. Мало ли, например владельцам интернет магазинов требуется показать ту или иную информацию в зависимости от страны посетителя.
В этом случае я пользуюсь замечательным сервисом http://www.geoplugin.net/. Он быстр в работе и какие то заметные торможения при обращении к нему скрипта я особо не замечал.

Можно использовать GeoIP базы закачав на сервер и потом постоянно обновлять по крону - возразите вы. Да можно. Все можно, но об этом как то в другой статье. Сейчас же о том как решить эту задачу при помощи вышеуказанного сервиса.

Скрипт обращения к сервису http://www.geoplugin.net/. :





function getLocationInfoByIp(){

$client  = @$_SERVER['HTTP_CLIENT_IP'];

$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];

$remote  = @$_SERVER['REMOTE_ADDR'];

$result  = array('country'=>'', 'city'=>'');

if(filter_var($client, FILTER_VALIDATE_IP)){

$ip = $client;

}elseif(filter_var($forward, FILTER_VALIDATE_IP)){

$ip = $forward;

}else{

$ip = $remote;
}

$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));

if($ip_data && $ip_data->geoplugin_countryName != null){

$result['country'] = $ip_data->geoplugin_countryCode;

$result['city'] = $ip_data->geoplugin_city;

}
return $result;
}

Думаю данный код итак понятен для тех кто знает php.
Теперь эту функцию getLocationInfoByIp() мы можем вызывать в нашем приложении.
Так как она возвращает массив мы и будем обращаться с ней как с массивом...

Пример:

// Присваиваем массив переменной
 $getArray  = getLocationInfoByIp();

//Теперь можно вытягивать значение по ключу
echo $getArray['country'];  //  Выведет страну
echo $getArray['city'];        //  Выведет город

Все логично и просто!

Данный сервис хранит информацию в формате json. Все их значения привожу ниже:

{
  "geoplugin_request":"193.160.224.138",
  "geoplugin_status":200,
  "geoplugin_credit":"Some of the returned data includes GeoLite data created by MaxMind, available from <a href='http:\/\/www.maxmind.com'>http:\/\/www.maxmind.com<\/a>.",
  "geoplugin_city":"Izmail",
  "geoplugin_region":"Odessa Oblast",
  "geoplugin_areaCode":"0",
  "geoplugin_dmaCode":"0",
  "geoplugin_countryCode":"UA",
  "geoplugin_countryName":"Ukraine",
  "geoplugin_continentCode":"EU",
  "geoplugin_latitude":"45.349300",
  "geoplugin_longitude":"28.840799",
  "geoplugin_regionCode":"17",
  "geoplugin_regionName":"Odessa Oblast",
  "geoplugin_currencyCode":"UAH",
  "geoplugin_currencySymbol":"&#8372;",
  "geoplugin_currencySymbol_UTF8":"\u20b4",
  "geoplugin_currencyConverter":0
}

Так еле мы в скрипте выше использовали выражения для страны - geoplugin_countryCode

и города - geoplugin_city

$result['country'] = $ip_data->geoplugin_countryCode;

$result['city'] = $ip_data->geoplugin_city;

Давайте например определим долготу и широту посетителя нашего сайта.
Для этого в скрипт добавим такие строчки:



$result['latitude'] = $ip_data->geoplugin_latitude;

$result['long'] = $ip_data->geoplugin_longitude;  

Теперь широту и долготу вытаскиваем так:


echo $getArray['latitude'];  //  Выведет широту
echo $getArray['long'];        //  Выведет долготу


Как решить задачу определения страны по IP  без сервиса поговорим как нибудь в следующей статье.
Ну все. Надеюсь чем нибудь помог. Пока!










Комментарии

Популярные сообщения из этого блога

Как восстановить пароль суперадминистратора в Joomla

    Как восстановить пароль суперадминистратора Joomla?  Есть несколько способов его восстановить. Вот некоторые из них: Вариант 1: файл configuration.php Если вы можете войти под другим пользователем (без прав супер-администратора), то можно добавить эту строку в конец файла configuration.php в корневом каталоге Joomla:   public $root_user='myname'; Замените myname именем пользователя к которому вы знаете пароль ( с правами Author или выше). Теперь вы сможете войти в админку под этим пользователем как суперадмин. Не забудьте удалить  строку из configuration.php вручную или позволить сделать это автоматически когда будет предложено из админпанели.  

Как починить winload.exe для Windows 10/11

  Приветствую вас в нашем блоге! Сегодня мы поговорим о том, как исправить ошибку, связанную с файлом winload.exe в Windows 10 и 11. Эта ошибка может стать серьёзной преградой, так как winload.exe отвечает за загрузку операционной системы. Ошибка winload.exe может помешать вашему компьютеру загрузиться, что делает её особенно критичной. Давайте рассмотрим причины этой ошибки и шаги для её устранения. Что такое winload.exe? winload.exe – это Windows Boot Loader файл, который используется в процессе загрузки Windows 10 и 11. Он находится в папке System32 и отвечает за загрузку драйверов и ядра операционной системы. Когда что-то идет не так с winload.exe, Windows может не загрузиться, и вы увидите одно из следующих сообщений об ошибке: winload.exe отсутствует или поврежден Код ошибки: 0xc000000e Причины ошибки winload.exe Эта ошибка может быть вызвана несколькими причинами: Поврежденные системные файлы : Файлы могут быть повреждены из-за неправильного завершения работы, вирусов или ош...

Как убрать в Virtuemart 2 кнопки добавления количества товаров в корзину.

Привет всем. В этой записи я поделюсь с вами как в Virtuemart 2 убрать кнопки добавления количества товаров в корзину так как не всегда они нужны. Например продажа уникальных товаров такие как редкие экземпляры картин, машин, цветов, уникальных рукотворных изделий и. т. д. Итак для удаления ненужных нам элементов с сайта идём по такому пути:  ваш_путь/components/com_virtuemart/views/productdetails/tmpl. Далее открываем файл default_addtocart.php. Далее находим: