Делал для клиента, переход на ru сайт если клиент из России. Через GEOIP базу данных:
Собственно качаем базу.
Для просмотра ссылки Войди или Зарегистрируйся
Получил чудо файл с 10МБ размером, ессно при большом колличестве обращений к сайту, не вариант загонять даже в базу данных. Есть *.dat формат, но он не прозрачен, и новичку трудно с ним работать (нужно разобраться в API что предлагает GEOIP бесплатно)
Покажу пример как все выполнено в прозрачном cvs формате:
1) На любой линукс/фрибсд системе парсим получая на выходе базу данных российских IP:
cat GeoIPCountryWhois.cvs|grep Russian Federation >> russian_ip.cvs
Получишь 500КБ, но все еще много лишнего в файле, уменьшаем дальше
PHP:
<?php
$db_file= file('russian_ip.cvs');
$result_file=fopen("russian_iponly.db","w+");
for ($i=0;$i<count($db_file);$i++)
{
$marker1=strpos($db_file[$i],"\",\"");
$marker2=strpos($db_file[$i],"\",\"",$marker1+1);
$marker3=strpos($db_file[$i],"\",\"",$marker2+1);
$marker4=strpos($db_file[$i],"\",\"",$marker3+1);
$ip_start=substr($db_file[$i],$marker2+3,$marker4-$marker3-3);
$ip_end=substr($db_file[$i],$marker3+3,$marker4-$marker3-3);
$db_start_end[$i]=$ip_start.".".$ip_end;
if ($i<(count($db_file)-1)) $db_start_end[$i]= $db_start_end[$i]."\n";
fwrite($result_file,$db_start_end[$i]);
}
fclose($result_file);
echo "\nDone!";
?>
Получили базу данных IP адресов (точнее диапазонов) в long формате, вам не обязательно знать что это такое
Просто иной вид отображения IP адреса.
Размер 82КБ. Можно автоматизировать сей процесс, либо вобще закинуть в MYSQL, но у меня задача была сделать сей процесс наиболее прозрачным для новичка.
Далее собственно то что должно быть на сайте
файлик с функцией function_ifiprussian.php
PHP:
<?php
function checkifiprussian ($iptocheck)
{
$check_result=FALSE;
$iptocheck=ip2long($iptocheck);
if ($iptocheck==-1) return;
$russianipdb=file("russian_iponly.db");
$i=0;
while ($i<count($russianipdb))
{
$start_ip=substr($russianipdb[$i],0,strpos($russianipdb[$i],"."));
$end_ip=substr($russianipdb[$i],strpos($russianipdb[$i],".")+1);
if ($iptocheck>$start_ip && $iptocheck<$end_ip)
{
$check_result=TRUE;
$i=count($russianipdb);
}
$i++;
}
return $check_result;
}
?>
Ну и теперь как с ним работать, предположим в верхушке index.php кладем такое:
PHP:
<?php
include_once('function_ifiprussian.php');
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet
{
$client_ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy
{
$client_ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$client_ip=$_SERVER['REMOTE_ADDR'];
}
$client_russian=checkifiprussian($client_ip);
if ($client_russian==TRUE) {echo "RUSSIAN";}
if ($client_russian==FALSE) {echo "NOTRUSSIAN";}
?>
Последние 2 строчки собственно и проверят из какой страны клиент, и вместо echo "russian"; или echo "notrussian"; ты можешь вставить либо редирект, либо любое другое действие которое тебе нужно.
Вот собственно и все. Данный мост можешь рассматривать как общую информацию, и завернуть скрипт под твои нужды, думаю все шаги предельно ясны и прозрачны.
Добавлено через 5 минут
Ах да, забыл добавить. Если у Вас есть доступ к модулям апача (или хостер может по требованию подключить таковой), самое прямое рещение - подключить опять же бесплатный модуль GEOIP в апаче и будут доступны переадресации через .htaccess.
Но если Вы не владелец сервера, мало вероятно что хостер ответит положительно на такую просьбу. Да и как описал выше, реализовать сию задачу на PHP - проще простого.