Как отслеживать местоположение / регион пользователей в PHP

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

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

Благодарю.

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

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

http://www.ip2location.com/

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

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

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

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

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

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

Вы должны использовать геоинформационную библиотеку .

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

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

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

Вы можете использовать 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 Geolocation API, который довольно опрятен, но требует разрешения пользователей, работает через JS и не работает в IE (пока) или должен искать сервис IPÜ, соответствующий вашим потребностям 🙂

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

$ Ключ = "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 />"; 

}

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