воскресенье, 5 июля 2009 г.

Получение реального IP-адреса на PHP

IP-адрес посетителя веб-страницы получается на PHP с использованием $_SERVER['REMOTE_ADDR']. Однако не во всех случаях оно работает. Ваш клиент может подключаться к Интернет через использование прокси-сервера, и тогда $_SERVER['REMOTE_ADDR'] в PHP вернёт всего лишь адрес прокси, а не клиентский адрес. Поэтому приведу функцию на PHP для получения реального IP-адреса машины посетителя сайта. Имеются расширенные серверные переменные для этого, это HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR.

Функция для получения реального IP-адреса в PHP


function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) // Определение IP-адреса
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) // Проверка того, что IP идёт через прокси
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}

В этой PHP функции сначала пытаемся получить непосредственно адрес компьютера пользователя, если невозможно - то используем HTTP_X_FORWARDED_FOR. Если и оно недоступно, то в конце берём IP-адрес используя REMOTE_ADDR.