Получить страну IP-адреса с PHP - PullRequest
90 голосов
/ 06 сентября 2010

В идеале я пытаюсь собрать PHP-скрипт, который можно запросить из любого веб-браузера, и он возвращает страну с IP-адресом, который обращался к PHP-скрипту.

Возможно ли это или естьлучшее решение?

Ответы [ 17 ]

88 голосов
/ 06 сентября 2010

Есть бесплатные и простые API, которые вы можете использовать, например:

Какой из них выглядит наиболее заслуживающим доверия, зависит от вас:)

В противном случае на вашем сервере есть сценарии, основанные на локальных базах данных. Тем не менее, данные базы данных должны регулярно обновляться. Проверьте это:

НТН!

Edit: И, конечно же, в зависимости от вашего проекта вы, возможно, захотите ознакомиться с функциями HTML5 Location . Вы еще не можете использовать их в Internet Explorer (IE9 будет поддерживать его, еще долгий путь), но если ваша аудитория в основном на мобильных устройствах или использует Safari / Firefox, определенно стоит посмотреть на это!

Получив координаты, вы можете преобразовать их в геокодирование в код страны. Опять же есть API, подобные этому:

Обновление, апрель 2013
Сегодня я бы порекомендовал использовать Geocoder , библиотеку PHP, которая позволяет очень легко геокодировать IP-адреса, а также данные почтовых адресов.

*** Обновление, сентябрь 2016
Поскольку политика конфиденциальности Google изменилась, вы не можете использовать API геолокации HTML5, если на вашем сервере нет сертификата HTPPS или пользователь не позволяет вам проверить его местоположение. Теперь вы можете использовать IP-адрес пользователя и зарегистрироваться в PHP или получить сертификат HTTPS.

54 голосов
/ 12 июля 2013

Существуют различные веб-API, которые сделают это за вас. Вот пример использования моего сервиса: http://ipinfo.io:

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
echo $details->country; // -> "US"

Веб-API - это хорошее быстрое и простое решение, но если вам нужно сделать много поисков, лучше использовать базу данных IP -> страны на вашем компьютере. MaxMind предлагает бесплатную базу данных , которую можно использовать с различными библиотеками PHP, включая GeoIP .

25 голосов
/ 21 мая 2012

Вы можете скачать ip-таблицы из MaxMind:

http://www.maxmind.com/app/geolite

Импортируйте CSV в вашу базу данных (обязательно создайте индекс для ip_long_from + ip_long_to). Тогда вы можете просто сделать:

$iplong = ip2long($_SERVER['REMOTE_ADDR']);

// should use mysqli with prepared statements etc, but just an example
mysql_query("
    SELECT country
    FROM ip_table
    WHERE $iplong BETWEEN ip_long_from AND ip_long_to
    LIMIT 1
");
10 голосов
/ 27 ноября 2014

Вот пример использования http://www.geoplugin.net/json.gp

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip={$ip}"));
echo $details;
6 голосов
/ 02 октября 2016

Вы можете получить страну с IP-адреса с помощью этого API местоположения

Код

    echo file_get_contents('https://ipapi.co/8.8.8.8/country/');

Ответ

   US 

Вот скрипка .Ответ - text, когда вы запрашиваете определенное поле, например, country здесь.Не требуется декодирование, просто подключите его к своему коду.

PS Если вам нужны все поля, например, https://ipapi.co/8.8.8.8/json/, ответ будет JSON.

5 голосов
/ 14 июля 2015

Я вижу, что ответов много, но никто из них не упоминает https://freegeoip.net/

Вам разрешено до 15,000 queries per hour. Я думаю, что этого достаточно в большинстве случаев. В противном случае вам следует подумать об использовании локальных баз данных из MaxMind GeoIP .

Freegeoip с открытым исходным кодом , и вы можете найти источники на github , развернуть его локально и избавиться от ограничений запроса.

Также служба предоставляет широту / долготу / часовой пояс и другие полезные вещи.

5 голосов
/ 06 сентября 2010

Посмотрите на функции GeoIP в разделе «Другие базовые расширения». http://php.net/manual/en/book.geoip.php

4 голосов
/ 20 июля 2015
$country_code = trim(file_get_contents("http://ipinfo.io/{$ip_address}/country"))

даст вам код страны.

2 голосов
/ 06 октября 2016

Установите и используйте Расширение PHP GeoIP , если можете.В debian lenny:

sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
sudo gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

sudo apt-get install php5-geoip
# or sudo apt-get install php-geoip for PHP7

, а затем попробуйте в PHP:

$ip = $_SERVER['REMOTE_ADDR'];
$country = geoip_country_name_by_name($ip);
echo 'The current user is located in: ' . $country;

, возвращает:

The current user is located in: Cameroon
1 голос
/ 16 декабря 2014

Вот еще один бесплатный API для запросов геолокации: http://geoip.nekudo.com

Ответы в формате JSON. Кроме того, исходный код API доступен на github, если вам нужно настроить собственный API.

...