Получение сведений о местоположении по IP в PHP

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

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

Спасибо


person Biranchi    schedule 02.12.2009    source источник


Ответы (6)


$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
)
person David Barnes    schedule 02.12.2009

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

В Google я нашел один бесплатный сервис: geoplugin. Они создают фрагменты php для использования своего сервиса: geoplugin/php.

person Amirshk    schedule 02.12.2009

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

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

  • Я установил расширение с "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

Что в моем случае верно: я действительно нахожусь в городе Лион, Франция.

person Pascal MARTIN    schedule 02.12.2009

Ознакомьтесь с библиотекой PEAR GeoIP.

person Daniel Schilling    schedule 02.12.2009

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

Мой ответ после многолетнего опыта геолокации таков...

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

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

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

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

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

Можете ли вы... с помощью PHP?

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

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

Для моих требований ip2location FULL db был значительно дешевле, чем Maxmind в год. *Однако БЕСПЛАТНАЯ БД Maxmind более обширна, чем БД ip2location FREE.

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

С уважением.

person Wombat_RW    schedule 27.10.2016

Недавно я обнаружил библиотеку PHP GeoIPLocation.

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

person Jess    schedule 25.09.2018
comment
Многие ссылки внутри страницы битые - person Michael C.; 26.09.2018