Получение информации о местоположении из 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.
Обратите внимание, что при попытке получить у посетителей дополнительный адрес, информацию о состоянии и т. Д. Я настоятельно рекомендую, чтобы он отображался таким образом, чтобы посетитель мог внести исправления; чтобы они не расстроились.
С уважением.
$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-скрипт. Он автоматически ищет обновленную базу данных и возвращает данные о стране для вас.