Функция 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 прокси-сервера, если используется прокси).

 

 

 

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 21.01.2025 20:40
  • Последнее обновление: 21.01.2025 20:40