Функция для определения IP-адреса клиента:
function get_ip()
{
$value = '';
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$value = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$value = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
$value = $_SERVER['REMOTE_ADDR'];
}
return $value;
}
Подробнее о переменных:
$_SERVER['REMOTE_ADDR']
– не всегда содержит реальный адрес, если клиент зашел через прокси-сервер, то будет адрес прокси-сервера.
$_SERVER['HTTP_CLIENT_IP']
и $_SERVER['HTTP_X_FORWARDED_FOR']
– они как раз содержат реальные адреса если клиент зашел через прокси-сервер. Адресов может быть несколько, разделенны запятыми.
Лучшее решение – получать и хранить все полученные адреса:
function get_ip_list()
{
$list = array();
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$list = array_merge($list, $ip);
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$list = array_merge($list, $ip);
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
$list[] = $_SERVER['REMOTE_ADDR'];
}
$list = array_unique($list);
return implode(',', $list);
}