23 сентября 2009 г.

GeoIP модуль для PHP

Довольно часто при проектировании многоязычного сайта встает вопрос о том, какой язык отображать по умолчанию при первом посещении сайта. Однако многим не известно что существует замечательный модуль GeoIP для PHP, который нам может в этом помочь.
Итак, начнем с загрузки и установки базы
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
Теперь необходимо установить модуль для PHP
sudo apt-get install php5-geoip
Все готово, можем проверять работу, для этого сделаем маленький тестовый скрипт
sudo vi /var/www/geo.php
который будет содержать следующее
<?php
    var_dump(geoip_record_by_name('ya.ru'));
?>
Наберем в браузере http://serverip/geo.php и если мы все сделали правильно, то увидим следующее
array(11) {
["continent_code"]=>
    string(2) "AS"
["country_code"]=>
    string(2) "RU"
["country_code3"]=>
    string(3) "RUS"
["country_name"]=>
    string(18) "Russian Federation"
["region"]=>
    string(2) "48"
["city"]=>
    string(6) "Moscow"
["postal_code"]=>
    string(0) ""
["latitude"]=>
    float(55.752201080322)
["longitude"]=>
    float(37.615600585938)
["dma_code"]=>
    int(0)
["area_code"]=>
    int(0)
}
Для примера можете проверить данные своего IP. Из этого массива нам для определения языка нужен элемент с индексом "country_code". Дальше все еще проще, чтобы показывать версию на русском языке необходимо для начала определить страну по IP клиента
$country_code = geoip_record_by_name($_SERVER['REMOTE_ADDR']);
и проверить, входит ли его страна в зону рускоязычных (это, например, Украина, Россия, Белоруссия)
if (in_array($country_code, array('UA', 'RU', 'BY'))){
    $lang = 'ru';
}else{
    $lang = 'en';
}

1 комментарий: