Как узнать IP посетителя сайта
Казалось бы, нет ничего проще - ip адрес посетителя заносится Апачем в переменную $_SERVER['REMOTE_ADDR'] но есть некоторые нюансы...
Пользователь может находится за прокси-сервером а это значит что в REMOTE_ADDR будет адрес не пользователя а прокси-сервера. Если пользователь использует анонимный прокси-сервер с целью спрятать свой ip адрес то определить его реальный адрес вряд ли получится, но если пользователь использует не анонимный прокси, например экономит трафик или еще зачем, то его вполне можно вычислить по заголовкам HTTP_X_FORWARDED_FOR, но при этом нужно учитывать, что если он выходит через прокси своей организации то там может содержаться внутренний ip адрес который нам не нужен.
Все вышесказанное учитывается в вот какой несложной функции:
function get_ip(){ $alt_ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_CLIENT_IP'])){ $alt_ip = $_SERVER['HTTP_CLIENT_IP']; } else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)){ // make sure we dont pick up an internal IP defined by RFC1918 foreach ($matches[0] AS $ip){ if (!preg_match("#^(10|172\.16|192\.168)\.#", $ip)){ $alt_ip = $ip; break; } } } else if (isset($_SERVER['HTTP_FROM'])){ $alt_ip = $_SERVER['HTTP_FROM']; } return $alt_ip; }
разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться
комментарии:
Дело в том, что если пользователь выходит через прокси сервер, то его IP будет адресом прокси-сервера. Данный скрипт как раз и позволяет выцепить IP пользователя в случае если прокси-сервер выдает в заголовках реквеста реальный IP пользователя.