Получение информации о местоположении из IP в PHP

Можно ли получить информацию о местоположении с IP-адреса пользователя в PHP.

Какие-либо предложения??

Спасибо

8 ответов

Решение
$ip = '98.229.152.237';
$xml = simplexml_load_file("http://ipinfodb.com/ip_query.php?ip=$ip");
print_r($xml);

Выход:

SimpleXMLElement Object
(
    [Ip] => 98.229.152.237
    [Status] => OK
    [CountryCode] => US
    [CountryName] => United States
    [RegionCode] => 33
    [RegionName] => New Hampshire
    [City] => Manchester
    [ZipPostalCode] => 03103
    [Latitude] => 42.9403
    [Longitude] => -71.4435
    [Timezone] => -5
    [Gmtoffset] => -5
    [Dstoffset] => -4
)

Вам нужно использовать некоторые услуги Geo IP Service

Один бесплатный сервис, который я нашел в Google: Geoplugin. Они сниппли php, чтобы использовать их сервис: геоплагин / php

Вы можете взглянуть на базу данных maxmind и расширение GeoIP PECL.

В моем случае:

  • Я установил расширение с помощью " pecl install geoip "
  • И я скачал базу данных geolitecity и скопировал ее в /usr/share/GeoIP/GeoIPCity.dat так что он найден расширением PECL.

Обратите внимание, что также должен быть пакет PEAR (PEAR::Net_GeoIP), чтобы помочь вам, если вы не можете установить расширение PECL.


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

$ip = '82.229.x.y';     // replace with your IP address
var_dump(geoip_record_by_name($ip));

И вы получите такой вывод:

array
  'continent_code' => string 'EU' (length=2)
  'country_code' => string 'FR' (length=2)
  'country_code3' => string 'FRA' (length=3)
  'country_name' => string 'France' (length=6)
  'region' => string 'B9' (length=2)
  'city' => string 'Lyon' (length=4)
  'postal_code' => string '' (length=0)
  'latitude' => float 45.75
  'longitude' => float 4.84999990463
  'dma_code' => int 0
  'area_code' => int 0

Что, в моем случае, правда: я действительно в городе Лионе, FR.

Первоначальный вопрос остается актуальным для многих; сейчас конец 2016 года).

Мой ответ после многолетнего опыта работы с GEO выглядит следующим образом...

Реальная информация о местонахождении за пределами "Страна" ненадежна. Вся информация берется из регистрации IP# ISP, и именно эта актуальная информация регулярно обновляется и передается основными поставщиками данных. По мере того как IP-адреса отбрасываются или покупаются, поставщики должны получить подробную информацию о регистрации / изменениях соответствующих предприятий (например, интернет-провайдеров). Большинство чисел получаются в "блоках", но не все обязательно относятся к одному и тому же серверу.

* Многие (если не большинство?) Небольших частных сайтов, предоставляющих информацию для общественности, используют БЕСПЛАТНУЮ базу данных Maxmind и (ненадлежащим образом) передают ее общественности; прочитайте предостережения Maxmind. Небольшие сайты не имеют ресурсов для постоянного обновления регистрации полномочий.

Свободные базы данных maxmind и "ip2location" являются меньшим подмножеством их платных баз данных; смотрите их предостережения для объяснения того, чего не хватает.

Многие IP-адреса, купленные в блоках, совместно используются на любом количестве серверов, что приводит к неоднозначности информации. При использовании беспроводного сетевого подключения к интернет-провайдеру, в отличие от, вероятно, стабильного проводного ADSL/ кабельного / бла-подключения, ошибка может быть весьма поразительной из-за особенно широкого размещения сетевых серверов ISP (ретрансляция); в большинстве случаев нестатическое изменение между сеансами и, возможно, даже некоторые во время каждого сеанса.

Например, при использовании роумингового беспроводного адаптера ноутбука для подключения к Интернет-провайдеру меня часто называют другим государством, и это может быть (здесь, в АС) от сотен до тысяч километров от моего фактического местоположения.

Вы можете... с PHP?

Используя основную пару поставщиков БД (т.е. ip2location.com), у каждого будет доступ к доступным серверным сценариям, которые можно использовать для получения необходимой информации. И вместо менее надежной бесплатной БД из них я использую DB1 ip2location, чтобы получить "страну" для посетителей, из которой я могу делать то, что хочу, и через Perl, и через PHP.

Я также АВТОМАТИЧЕСКИ загружаю и распаковываю, согласно предостережениям, двоичный БД на ежемесячной основе сразу после его обновления. Очевидно, что доступ к поискам с собственного сайта устраняет проблемы с удаленным сбором и обработкой по требованию.

Для моих требований ip2location FULL db был значительно дешевле, чем Maxmind в год. * Однако база данных Maxmind FREE более обширна, чем база данных ip2location FREE.

Обратите внимание, что при попытке получить у посетителей дополнительный адрес, информацию о состоянии и т. Д. Я настоятельно рекомендую, чтобы он отображался таким образом, чтобы посетитель мог внести исправления; чтобы они не расстроились.

С уважением.

Проверьте библиотеку PEAR GeoIP.

 $ip = "66.96.147.144";
    $geoPlugin_array = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $ip) );
    echo '<pre>';
    print_r($geoPlugin_array);

OUTPUT :
Array
(
    [geoplugin_request] => 66.96.147.144
    [geoplugin_status] => 200
    [geoplugin_credit] => Some of the returned data includes GeoLite data created by MaxMind, available from http://www.maxmind.com.
    [geoplugin_city] => Burlington
    [geoplugin_region] => MA
    [geoplugin_areaCode] => 781
    [geoplugin_dmaCode] => 506
    [geoplugin_countryCode] => US
    [geoplugin_countryName] => United States
    [geoplugin_continentCode] => NA
    [geoplugin_latitude] => 42.5051
    [geoplugin_longitude] => -71.204697
    [geoplugin_regionCode] => MA
    [geoplugin_regionName] => Massachusetts
    [geoplugin_currencyCode] => USD
    [geoplugin_currencySymbol] => $
    [geoplugin_currencySymbol_UTF8] => $
    [geoplugin_currencyConverter] => 1
)

Для этого вы можете использовать какой-либо сервис API.

Например, https://apiip.net , их API предоставляет много информации об IP, также вы можете запросить ответы XML, если это необходимо.

Простой GET-вызов:

      https://apiip.net/api/check?ip=67.250.186.196&accessKey={your_api_key}

Пример кода:

      // Set IP address and API access key
$ip = '67.250.186.196';
$access_key = 'YOUR_ACCESS_KEY';

// Initialize CURL
$ch = curl_init('https://apiip.net/api/check?ip='.$ip.'&accessKey='.$access_key.'');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Store the data
$json_res = curl_exec($ch);
curl_close($ch);

// Decode JSON response
$api_result = json_decode($json_res, true);

// Output the result
echo $api_result;

Я недавно нашел PHP GeoIPLocation Library

Это единственный PHP-файл, который вам нужно включить в ваш PHP-скрипт. Он автоматически ищет обновленную базу данных и возвращает данные о стране для вас.

Другие вопросы по тегам