Иногда требуется определить на сайте с какой страны и города пришёл посетитель. Мало ли, например владельцам интернет магазинов требуется показать ту или иную информацию в зависимости от страны посетителя.
В этом случае я пользуюсь замечательным сервисом http://www.geoplugin.net/. Он быстр в работе и какие то заметные торможения при обращении к нему скрипта я особо не замечал.
Можно использовать GeoIP базы закачав на сервер и потом постоянно обновлять по крону - возразите вы. Да можно. Все можно, но об этом как то в другой статье. Сейчас же о том как решить эту задачу при помощи вышеуказанного сервиса.
Скрипт обращения к сервису http://www.geoplugin.net/. :
function getLocationInfoByIp(){
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = @$_SERVER['REMOTE_ADDR'];
$result = array('country'=>'', 'city'=>'');
if(filter_var($client, FILTER_VALIDATE_IP)){
$ip = $client;
}elseif(filter_var($forward, FILTER_VALIDATE_IP)){
$ip = $forward;
}else{
$ip = $remote;
}
$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
if($ip_data && $ip_data->geoplugin_countryName != null){
$result['country'] = $ip_data->geoplugin_countryCode;
$result['city'] = $ip_data->geoplugin_city;
}
return $result;
}
Думаю данный код итак понятен для тех кто знает php.
Теперь эту функцию getLocationInfoByIp() мы можем вызывать в нашем приложении.
Так как она возвращает массив мы и будем обращаться с ней как с массивом...
Пример:
// Присваиваем массив переменной
$getArray = getLocationInfoByIp();
//Теперь можно вытягивать значение по ключу
echo $getArray['country']; // Выведет страну
echo $getArray['city']; // Выведет город
Все логично и просто!
Данный сервис хранит информацию в формате json. Все их значения привожу ниже:
{
Так еле мы в скрипте выше использовали выражения для страны - geoplugin_countryCode
и города - geoplugin_city
$result['country'] = $ip_data->geoplugin_countryCode;
$result['city'] = $ip_data->geoplugin_city;
Давайте например определим долготу и широту посетителя нашего сайта.
Для этого в скрипт добавим такие строчки:
$result['latitude'] = $ip_data->geoplugin_latitude;
$result['long'] = $ip_data->geoplugin_longitude;
Теперь широту и долготу вытаскиваем так:
echo $getArray['latitude']; // Выведет широту
echo $getArray['long']; // Выведет долготу
Как решить задачу определения страны по IP без сервиса поговорим как нибудь в следующей статье.
Ну все. Надеюсь чем нибудь помог. Пока!
В этом случае я пользуюсь замечательным сервисом http://www.geoplugin.net/. Он быстр в работе и какие то заметные торможения при обращении к нему скрипта я особо не замечал.
Можно использовать GeoIP базы закачав на сервер и потом постоянно обновлять по крону - возразите вы. Да можно. Все можно, но об этом как то в другой статье. Сейчас же о том как решить эту задачу при помощи вышеуказанного сервиса.
Скрипт обращения к сервису http://www.geoplugin.net/. :
function getLocationInfoByIp(){
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = @$_SERVER['REMOTE_ADDR'];
$result = array('country'=>'', 'city'=>'');
if(filter_var($client, FILTER_VALIDATE_IP)){
$ip = $client;
}elseif(filter_var($forward, FILTER_VALIDATE_IP)){
$ip = $forward;
}else{
$ip = $remote;
}
$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
if($ip_data && $ip_data->geoplugin_countryName != null){
$result['country'] = $ip_data->geoplugin_countryCode;
$result['city'] = $ip_data->geoplugin_city;
}
return $result;
}
Думаю данный код итак понятен для тех кто знает php.
Теперь эту функцию getLocationInfoByIp() мы можем вызывать в нашем приложении.
Так как она возвращает массив мы и будем обращаться с ней как с массивом...
Пример:
// Присваиваем массив переменной
$getArray = getLocationInfoByIp();
//Теперь можно вытягивать значение по ключу
echo $getArray['country']; // Выведет страну
echo $getArray['city']; // Выведет город
Все логично и просто!
Данный сервис хранит информацию в формате json. Все их значения привожу ниже:
{
"geoplugin_request":"193.160.224.138", "geoplugin_status":200, "geoplugin_credit":"Some of the returned data includes GeoLite data created by MaxMind, available from <a href='http:\/\/www.maxmind.com'>http:\/\/www.maxmind.com<\/a>.", "geoplugin_city":"Izmail", "geoplugin_region":"Odessa Oblast", "geoplugin_areaCode":"0", "geoplugin_dmaCode":"0", "geoplugin_countryCode":"UA", "geoplugin_countryName":"Ukraine", "geoplugin_continentCode":"EU", "geoplugin_latitude":"45.349300", "geoplugin_longitude":"28.840799", "geoplugin_regionCode":"17", "geoplugin_regionName":"Odessa Oblast", "geoplugin_currencyCode":"UAH", "geoplugin_currencySymbol":"₴", "geoplugin_currencySymbol_UTF8":"\u20b4", "geoplugin_currencyConverter":0 }
Так еле мы в скрипте выше использовали выражения для страны - geoplugin_countryCode
и города - geoplugin_city
$result['country'] = $ip_data->geoplugin_countryCode;
$result['city'] = $ip_data->geoplugin_city;
Давайте например определим долготу и широту посетителя нашего сайта.
Для этого в скрипт добавим такие строчки:
$result['latitude'] = $ip_data->geoplugin_latitude;
$result['long'] = $ip_data->geoplugin_longitude;
Теперь широту и долготу вытаскиваем так:
echo $getArray['latitude']; // Выведет широту
echo $getArray['long']; // Выведет долготу
Как решить задачу определения страны по IP без сервиса поговорим как нибудь в следующей статье.
Ну все. Надеюсь чем нибудь помог. Пока!
Комментарии
Отправить комментарий