Как отслеживать местоположение пользователя / регион в PHP - PullRequest
4 голосов
/ 14 октября 2010

Я пытаюсь получить страну, из которой пользователь просматривает сайт, чтобы я мог определить, какую валюту показывать на сайте.Я попытался использовать сценарии GET, доступные по адресу: http://api.hostip.info, но они просто возвращают XX, когда я проверяю его.

Если кто-нибудь знает какие-либо более эффективные методы, пожалуйста, поделитесь.

Спасибо.

Ответы [ 6 ]

3 голосов
/ 14 октября 2010

Я использую это:

  $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  $ip = $_SESSION['ip'];
  $try1 = "http://ipinfodb.com/ip_query.php?ip=".$ip."&output=xml";
  $try2 = "http://backup.ipinfodb.com/ip_query.php?ip=".$ip."&output=xml";
  $XML = @simplexml_load_file($try1,NULL,TRUE);
  if(!$XML) { $XML = @simplexml_load_file($try2,NULL,TRUE); }
  if(!$XML) { return false; }

  //Retrieve location, set time
  if($XML->City=="") { $loc = "Localhost / Unknown"; }
  else { $loc = $XML->City.", ".$XML->RegionName.", ".$XML->CountryName; }
  $_SESSION['loc'] = $loc;
1 голос
/ 14 октября 2010

Попробуйте это:

http://ip -to-country.webhosting.info /

http://www.ip2location.com/

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

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

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

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

0 голосов
/ 26 июня 2017

Есть много способов сделать это, как предлагалось ранее.Но я предлагаю вам взглянуть на библиотеку PHP IP2, доступную по адресу https://github.com/ip2iq/ip2-lib-php, которую мы разработали.

Вы можете использовать ее, как показано ниже:

<?php
    require_once("Ip2.php");

    $ip2 = new \ip2iq\Ip2();
    $country_code = $ip2->country('8.8.8.8');
    //$country_code === 'US'
?>

Это не такнужен какой-либо SQL или поиск в веб-сервисе только локальный файл данных.Это быстрее, чем почти все другие методы там.База данных обновляется ежемесячно, вы можете скачать ее бесплатно.

Единственное, что вам нужно сделать сейчас, если вам нужно название страны на вашем языке, это сопоставить его с ассоциативным массивом из чего-то вроде этого https://gist.github.com/DHS/1340150

0 голосов
/ 24 февраля 2015

Попробуйте:

$ ключ = "9dcde915a1a065fbaf14165f00fcc0461b8d0a6b43889614e8acdb8343e2cf15"; $ ip = "198.168.1230.122";

$ url = "http://api.ipinfodb.com/v3/ip-city/?key=$key&ip=$ip&format=xml";

// загрузить xml файл

$ xml = simplexml_load_file ($ url); // выводим имя первого элемента

echo $ xml-> getName (). "
"; // создаем цикл для вывода имени элемента и данных для каждого узла

foreach ($ xml-> children () как $ child)

{

echo $child->getName() . ": " . $child . "<br />";

} * * тысяча двадцать-один

0 голосов
/ 14 октября 2010

Вы можете использовать Geolocation, чтобы получить координаты, а затем некоторые службы, чтобы получить страну из этого, но API геолокации основан на браузере, поэтому вы можете получить к нему доступ только через JavaScript, а затем как-то передать эти данные в PHP, я написал что-то в JS Part один раз:

http://www.lautr.com/utilizing-html5-geolocation-api-and-yahoo-placefinder-example

Когда дело доходит до получения Местоположения через IP, существуют bazillion Services, которые предлагают базы данных для этого, некоторые бесплатные, некоторые платные, некоторые с большим количеством хранимых IP и большим количеством данных, некоторые с меньшим, для Например, тот, который вы упомянули, работает просто отлично:

http://api.hostip.info/?ip=192.0.32.10

Таким образом, вы можете использовать API Geolocation, который довольно удобен, но требует разрешения пользователей, работает через JS и не работает в IE (пока) или должен искать IPÜ Location Service, который соответствует вашим потребностям :)

0 голосов
/ 14 октября 2010

Вы должны использовать библиотеку geoip .

Maxmind предоставляет бесплатные базы данных и коммерческие базы данных, с разницей в дате последнего обновления и точностью, коммерческое качество более высокое.

См. http://www.maxmind.com/app/geolitecountry для бесплатной базы данных.

Я думаю, этого должно быть достаточно для удовлетворения основных потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...