Как узнать страну по IP-адресу через PHP
Если Вы собираетесь делать собственную статистику посещений для своего сайта, то, наверняка, Вы захотите знать, из какой страны приходят к Вам посетители. Узнать страну посетителя можно по его IP-адресу, и в этой статье мы разберём, как это делается через PHP.
Узнать страну по IP-адресу через PHP можно двумя путями. Первый путь - это воспользоваться каким-нибудь WHOIS-сервисом, отправив на него запрос и получить от него ответ. Второй вариант - создать свою таблицу в базе данных, в которой будут находиться соответствия IP-адресов и стран. Плюсы и минусы первого и второго способа очевидны, поэтому не буду на них останавливаться. Второй способ реализации зависит от Вашей базы данных и от таблицы, в которой находятся соответствия IP-адресов и стран. Поэтому мы с Вами рассмотрим первый способ, так как он универсален, хотя, безусловно, на локальном сервере без подключения к Интернету Вы не сможете протестировать данный скрипт:
<?php
if( $curl = curl_init() ) {
$ip = $_SERVER["REMOTE_ADDR"];
curl_setopt($curl, CURLOPT_URL, 'http://ip-whois.net/ip_geo.php?ip='.$ip);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
$out = curl_exec($curl);
$matches = array();
$country = preg_match_all("/Страна: (.*)/i", $out, $matches);
print_r($matches[1][1]);
curl_close($curl);
}
?>
Кратко принцип: находим сервис, смотрим, как надо отправлять запрос (как называются переменные, каким методом отправляются), отправляем через cURL запрос, получаем ответ, вытаскиваем нужную строку через регулярные выражения, выводим результат. Если Вы запустите этот скрипт, то увидите название страны, которой принадлежит Ваш IP-адрес. Однако, стоит отметить, что далеко не для каждого IP-адреса возможно узнать страну. Тут зависит от базы, которую использует конкретный WHOIS-сервис. Сразу скажу, что для тестирования этого скрипта надо его загрузить на удалённый сервер, чтобы не подставлялся IP-адрес: 127.0.0.1, так как он не сработает, ведь для него страны не сущесвует. Либо же просто замените значение переменной $ip на какой-нибудь другой IP-адрес. Как видите, всё очень просто, главное, здесь чётко выбрать один из двух способов. Если Вы захотите узнавать страну по IP-адресу через свою базу данных, то тогда Вам надо её предварительно найти. Их достаточно много, поэтому просто поищите их в Интернете. А если Вас устраивает пользоваться WHOIS-сервисом и экономить ресурсы своего сервера и место в базе данных, то тогда можете использовать код выше, а, доработав регулярное выражение, Вы можете вытащить и другие данные, которые выдаёт данный сервис, например, город.
-
- Михаил Русаков
Комментарии (20):
Прошу заметить, что значение $matches[1][1] возвращается к пользователю со значением "<br>" (Например - Russian Federation<br>) Поэтому сравнивать данное значение с постоянной константой не получится.
Ответить
Что означает эта запись: "if( $curl = curl_init() )" ? По этому примеру мне выдает ошибку: "Fatal error: Call to undefined function curl_init() "
Ответить
http://myrusakov.ru/php-curl-denwer.html
Ответить
Михаил, подскажите пожалуйста, как сделать, что блоки по клику сворачиваются - слева колонка - круто) JQuery?
Ответить
http://myrusakov.ru/skrytyj-tekst-javascript.html
Ответить
Спасибо) а как делается так, чтоб комментарии лесенкой располагались?
Ответить
Через CSS, каждый внутренний ul содержит дополнительный margin-left.
Ответить
понимаю, что css, тег ul знаком, свойство margin-left также знакомо, непонимаю алгоритма реализации такой фишки =\
Ответить
<ul><li><ul><li><ul> - и так далее. И в CSS ul {margin-left: 20px;}
Ответить
благодарю) буду пробовать - может и получится у меня))
Ответить
Михаил, как дальше завязать результат и страницы мультиязычного сайта? Сайт на DLE имеет три языковых версии рус,нем и анг. как определить страну и вывести нужную версию сайта?
Ответить
Не работаю с готовыми движками: http://myrusakov.ru/php-engine-vs-null.html
Ответить
готовые или нет, по сути нет разницы. я хотел у Вас спросить какой код будет для моей задачи?
Ответить
Разница не просто есть, она бесконечно огромная. И раз Вы задаёте этот вопрос, то это и есть разница. Нет никаких кодов. Вам нужны расширения.
Ответить
Страну не правильно выводит, почему?
Ответить
Может потому, что интернет у пользователя через прокси.
Ответить
Как можно реализовать на сайте вывод контента для каждого региона свой.
Ответить
А это точно не устаревший скрипт? я новичок в пхп просто если ввести в браузер http://ip-whois.net/ip_geo.php?ip=123.32.45 (например), то сервис пишет, что страницы не существует к примеру я подставлял свой правильный ip тоже
Ответить
Скрипт устаревший. Теперь не ip_geo.php, а ip_geos.php. Ну типа так http://ip-whois.net/ip_geos.php?ip=123.32.45.21. Но скрипт все равно не работает. Видать название полей изменили.
Ответить
Скрипт в принципе рабочий, нужно только подменить ip_geo.php на а ip_geos.php, другое дело, что он не оптимален. Как по мне, достаточно вот такого краткого кода, специально добавил комментарии чтобы всем было ясно: /** * Узнаем IP адресс пользователя */ $ip = $_SERVER['REMOTE_ADDR']; /** * Получаем информацию относительно IP * (страна, город и другая информация */ $details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json")); /* Выводим информацию о IP */ echo $details->ip; echo $details->hostname; echo $details->city; echo $details->region; echo $details->country; echo $details->loc; echo $details->org; echo $details->postal;
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.