2010-10-14 3 views
4

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

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

Спасибо.

+3

волшебного слова является геолокацией: HTTP: // StackOverflow. com/search? q = php + geolocation –

+1

Вы также можете использовать локали браузера, чтобы угадать, что пользователь может использовать для валюты – Gordon

ответ

1

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

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

http://www.ip2location.com/

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

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

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

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

0

Вы должны использовать geoip library.

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

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

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

0

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

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

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

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

Так Вы можете эфир пойти с API геолокации, который довольно аккуратно, но требуют разрешений пользователей, работает с помощью JS и не работает в IE (до сих пор), либо искать IPU Location Service, что припадки ваши потребности :)

3

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

$_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; 
+0

Это делает запрос каждый раз, когда он запускается (без локального кэширования уже разрешенных IP-адресов). Если внешний веб-сайт не работает, на загрузку будет загружена страница 30 или 60 секунд. –

+0

. Что вы описываете, потребуется автономный кеш IP-адресов, который, как я понял, побеждает цель упражнения. – Ben

0

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

$ ключ = "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(). "
"; // создать цикл для печати имени элемента и данных для каждого узла

Еогеаспа ($ XML-> дети() в $ ребенок)

{

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

}

0

Есть много способов сделать это, как это было предложено ранее. Но я предлагаю вам взглянуть на библиотеку 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

Смежные вопросы