Функция cot_getCurrentUserIp в Cotonti
Описание функции cot_getCurrentUserIp()
Эта функция предназначена для получения текущего IP-адреса пользователя, обращающегося к серверу. Веб-сервер может использовать различные заголовки для передачи IP-адреса клиента, если он находится за прокси-сервером или в балансировщике нагрузки.
Функция проверяет несколько возможных заголовков в глобальном массиве $_SERVER, и если находит валидный IP-адрес, возвращает его. Если все проверки не проходят, возвращается null.
Код функции
/**
* @return ?string
*/
function cot_getCurrentUserIp()
{
if (
isset($_SERVER['HTTP_CLIENT_IP'])
&& filter_var($_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)
) {
return $_SERVER['HTTP_CLIENT_IP'];
}
if (
isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])
&& filter_var($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'], FILTER_VALIDATE_IP)
) {
return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
}
if (
isset($_SERVER['HTTP_X_REAL_IP'])
&& filter_var($_SERVER['HTTP_X_REAL_IP'], FILTER_VALIDATE_IP)
) {
return $_SERVER['HTTP_X_REAL_IP'];
}
if (
isset($_SERVER['HTTP_X_FORWARDED_FOR'])
&& filter_var($_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)
) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if (isset($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR'];
}
return null;
}
Детальное описание условий
Проверка HTTP_CLIENT_IP:
if (isset($_SERVER['HTTP_CLIENT_IP']) && filter_var($_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
Что проверяется?: Проверяется наличие заголовка HTTP_CLIENT_IP, который часто используется для передачи IP-адреса, если клиент использует прокси.
Как проверяется?: С помощью функции filter_var проверяется, является ли значение этого заголовка допустимым IP-адресом (с использованием фильтра FILTER_VALIDATE_IP).
Действие: Если заголовок существует и значение — валидный IP, то этот IP возвращается.
Проверка HTTP_X_CLUSTER_CLIENT_IP:
if (isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && filter_var($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'], FILTER_VALIDATE_IP))
Что проверяется?: Проверяется заголовок HTTP_X_CLUSTER_CLIENT_IP, который может использоваться в некоторых облачных инфраструктурах или балансировщиках нагрузки.
Как проверяется?: Функция filter_var проверяет, является ли значение валидным IP-адресом.
Действие: Если значение является валидным IP, то возвращается этот IP-адрес.
Проверка HTTP_X_REAL_IP:
if (isset($_SERVER['HTTP_X_REAL_IP']) && filter_var($_SERVER['HTTP_X_REAL_IP'], FILTER_VALIDATE_IP))
Что проверяется?: Проверяется заголовок HTTP_X_REAL_IP, который может быть установлен прокси-сервером или сервером балансировки нагрузки для передачи реального IP-адреса клиента.
Как проверяется?: Проверяется, является ли значение этого заголовка валидным IP с помощью filter_var.
Действие: Если это валидный IP-адрес, он возвращается.
Проверка HTTP_X_FORWARDED_FOR:
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && filter_var($_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
Что проверяется?: Проверяется наличие заголовка HTTP_X_FORWARDED_FOR, который используется для передачи оригинального IP-адреса клиента, если запрос был передан через прокси или CDN.
Как проверяется?: Функция filter_var проверяет, является ли IP-адрес в этом заголовке валидным.
Действие: Если найден валидный IP, он возвращается.
Проверка REMOTE_ADDR:
if (isset($_SERVER['REMOTE_ADDR']))
Что проверяется?: Если предыдущие условия не сработали, то проверяется заголовок REMOTE_ADDR, который всегда содержит IP-адрес клиента (реальный или проксированный) при обращении к серверу.
Как проверяется?: Проверяется, существует ли заголовок в массиве $_SERVER.
Действие: Если этот заголовок присутствует, его значение возвращается как IP-адрес пользователя.
Возвращение null:
return null;
Что проверяется?: Если ни одно из условий не удовлетворено, то функция возвращает null, что означает, что IP-адрес не был найден или не был предоставлен.
Список супер глобальных переменных в PHP, используемых в функции:
$_SERVER: Массив, содержащий информацию о сервере и окружении, включая заголовки HTTP, информацию о запросах и другую служебную информацию. В данной функции используется для получения различных заголовков, таких как HTTP_CLIENT_IP, HTTP_X_REAL_IP и другие.
Примеры значений в $_SERVER:
HTTP_CLIENT_IP: IP-адрес клиента через прокси-сервер.HTTP_X_CLUSTER_CLIENT_IP: IP клиента, используемое в некоторых балансировщиках нагрузки.HTTP_X_REAL_IP: Реальный IP клиента через прокси-сервер или балансировщик нагрузки.HTTP_X_FORWARDED_FOR: Заголовок, содержащий оригинальный IP-адрес клиента, если запрос был проксирован.REMOTE_ADDR: IP-адрес клиента (может быть IP прокси-сервера, если используется прокси).
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 20:40
- Последнее обновление: 21.01.2025 20:40