Получение информации о местоположении из IP в PHP - PullRequest
6 голосов
/ 02 декабря 2009

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

Есть предложения ??

Спасибо

Ответы [ 7 ]

6 голосов
/ 02 декабря 2009
$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
)
4 голосов
/ 02 декабря 2009

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

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

3 голосов
/ 02 декабря 2009

Вы можете просмотреть базу данных 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.

1 голос
/ 27 октября 2016

Первоначальный вопрос остается актуальным для многих; сейчас конец 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.

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

Привет.

1 голос
/ 02 декабря 2009

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

0 голосов
/ 25 сентября 2018

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

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

0 голосов
/ 24 июля 2015
 $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
)
...