Ещё плюс ко всему в $HTTP_X_FORWARDER_FOR может быть не один ip адрес, а несколько, зависит от того сколько проксей было пройдено.
Вобщем вот моя функция, пользуйтесь на здоровье:
function get_ips() {
$result[\'IP\']=GetEnv(\'HTTP_CLIENT_IP\');
$result[\'PROXY\']=GetEnv(\'HTTP_X_FORWARDED_FOR\');
if ($result[\'PROXY\']) {
$tmp=explode(",", str_replace(" ", "", $result[\'PROXY\']));
$result[\'IP\']=$tmp[sizeof($tmp)-1];
if(!preg_match("/^[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}$/", $result[\'IP\']))
$result[\'IP\']="";
$result[\'PROXY\']=$_SERVER[\'REMOTE_ADDR\'];
}
elseif (!$result[\'IP\'])
$result[\'IP\']=$_SERVER[\'REMOTE_ADDR\'];
return $result;
}
Функция возвращает массив, состоящий из двух элементов:
IP - ip адрес пользователя, если пусто значит было unknown.
PROXY - адрес последнего пройденого прокси сервера.