Определение списка IP адресов пользователя
05 Окт 2009
Была задача определить с какого IP адреса зашел пользователь на сайт, причем всем известно, что получивший IP адрес через $_SERVER['REMOTE_ADDR'] дает для всех пользователей всего один IP в случае когда они выходят через прокси, т.е. у каждого пользователя имеется «серый» (внутренний) адрес. Код ниже, не претендует на правильность получения Всех адресов пользователя, но как минимум работает для 90% случаев, все зависит от удаленного пользователя:
function getIps()
{
$ips = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : '';
preg_match_all('#(\d+\.\d+\.\d+\.\d+)#', $ips, $m);
$m[0][]=$_SERVER['REMOTE_ADDR'];
$ips = sizeof($m) ? implode(',',array_unique($m[0])) : '';
return $ips;
}
То есть в $_SERVER['HTTP_X_FORWARDED_FOR'] значение имеет вид 'NNN.NNN.NNN.NNN,MMM.MMM.MMM.MMM' ?
Ни разу не видел такого. Надо бы проверить.
А код примера, кстати, надо бы написать более стабильный. Если уж пишется проверка типа
$ips = sizeof($m) ? ....то стоит писать и другие проверки
Павел
Нет, $_SERVER['HTTP_X_FORWARDED_FOR'] тут будет просто другой IP
а через запятую будет результат работы функции моей