Обзор возможностей суперглобального массива $_SERVER в PHP

94 11 января 2026

Суперглобальные массивы — это особые переменные в PHP, которые доступны во всех областях видимости без необходимости объявлять их глобальными. Одним из таких массивов является $_SERVER: он содержит ключевые данные о параметрах текущего HTTP-запроса, сервере и окружении исполнения скрипта.


Основные элементы массива $_SERVER

Ниже перечислены все основные и дополнительные элементы массива $_SERVER, которые могут встречаться в PHP.


📌 Информация о сервере

  • SERVER_ADDR — IP-адрес сервера.

  • SERVER_NAME — доменное имя сервера.

  • SERVER_PORT — порт, на котором работает сервер.

  • SERVER_PROTOCOL — версия HTTP-протокола.

  • SERVER_SOFTWARE — информация о веб-сервере.

  • GATEWAY_INTERFACE — версия CGI-интерфейса.


📌 Информация о запросе

  • REQUEST_METHOD — HTTP-метод запроса.

  • REQUEST_URI — URI текущего запроса.

  • QUERY_STRING — строка параметров запроса.

  • REQUEST_TIME — время начала запроса (timestamp).

  • REQUEST_TIME_FLOAT — время начала запроса с микросекундами.

  • CONTENT_TYPE — тип содержимого запроса.

  • CONTENT_LENGTH — длина тела запроса.


📌 Пути и выполняемые скрипты

  • DOCUMENT_ROOT — корневая директория сайта.

  • SCRIPT_FILENAME — полный путь к файлу скрипта.

  • SCRIPT_NAME — путь к скрипту относительно корня.

  • PHP_SELF — путь к текущему скрипту.

  • PATH_INFO — дополнительный путь после имени скрипта.

  • PATH_TRANSLATED — физический путь PATH_INFO.

  • ORIG_PATH_INFO — исходный PATH_INFO.


📌 Информация о клиенте

  • REMOTE_ADDR — IP-адрес клиента.

  • REMOTE_PORT — порт клиента.

  • REMOTE_HOST — имя хоста клиента (редко используется).


📌 HTTP-заголовки (HTTP_*)

  • HTTP_HOST — домен сайта из заголовка Host.

  • HTTP_USER_AGENT — User-Agent браузера.

  • HTTP_ACCEPT — допустимые типы контента.

  • HTTP_ACCEPT_LANGUAGE — предпочитаемые языки.

  • HTTP_ACCEPT_ENCODING — поддерживаемые методы сжатия.

  • HTTP_CONNECTION — тип соединения.

  • HTTP_REFERER — страница-источник перехода.

  • HTTP_COOKIE — cookies клиента.


📌 HTTPS и прокси

  • HTTPS — используется ли HTTPS.

  • REQUEST_SCHEME — схема запроса (http / https).

  • HTTP_X_FORWARDED_FOR — IP клиента через прокси.

  • HTTP_X_REAL_IP — реальный IP клиента.


Важно: набор ключей $_SERVER зависит от веб-сервера, конфигурации PHP и типа запроса. Некоторые элементы могут отсутствовать.


Практическое использование


Массив $_SERVER часто используется для получения технической информации о текущем запросе и сервере. Например:

<?php
// Самый простой способ вывести конкретные данные
echo "Запрошенный скрипт: " . $_SERVER['PHP_SELF'] . "<br>";
echo "IP пользователя: " . $_SERVER['REMOTE_ADDR'] . "<br>";
echo "HTTP-метод: " . $_SERVER['REQUEST_METHOD'] . "<br>";

// Пример вывода всего массива $_SERVER
echo "<pre>";
print_r($_SERVER);
echo "</pre>";

// Вывод через перебор массива
foreach ($_SERVER as $var => $value) {
    echo "$var => $value<br>";
}

// Получение IP пользователя
$ip = $_SERVER['REMOTE_ADDR'];
echo "IP: $ip<br>";

// Адрес страницы
echo "URI: " . $_SERVER['REQUEST_URI'] . "<br>";

// Узнать браузер
printf("Your browser is: %s<br>", $_SERVER['HTTP_USER_AGENT']);

// HTTP протокол
echo "Протокол: " . $_SERVER['SERVER_PROTOCOL'] . "<br>";

// Текущий порт сервера
echo "Порт сервера: " . $_SERVER['SERVER_PORT'] . "<br>";

// Имя сервера
echo "HTTP_HOST: " . $_SERVER['HTTP_HOST'] . "<br>";

// Разрешенные хосты
$allowed_hosts = ['site.com', 'site.ua', 'site.com.ua'];
if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) {
    header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request');
    exit;
}

// Порт подключения (редко используется)
if(isset($_SERVER['HTTP_PORT'])) echo "Порт подключения: " . $_SERVER['HTTP_PORT'] . "<br>";

// Схема запроса
echo "Схема: " . $_SERVER['REQUEST_SCHEME'] . "<br>";

// Время запроса к серверу
echo "Время запроса (timestamp): " . $_SERVER['REQUEST_TIME'] . "<br>";

// Пути на сервере
echo "DOCUMENT_ROOT: " . $_SERVER['DOCUMENT_ROOT'] . "<br>";
echo "PATH_INFO: " . ($_SERVER['PATH_INFO'] ?? '') . "<br>";
echo "SCRIPT_NAME: " . $_SERVER['SCRIPT_NAME'] . "<br>";
echo "SCRIPT_FILENAME: " . $_SERVER['SCRIPT_FILENAME'] . "<br>";

// Авторизация HTTP
echo "AUTH_TYPE: " . ($_SERVER['AUTH_TYPE'] ?? '') . "<br>";
echo "REMOTE_USER: " . ($_SERVER['REMOTE_USER'] ?? '') . "<br>";
echo "PHP_AUTH_USER: " . ($_SERVER['PHP_AUTH_USER'] ?? '') . "<br>";
echo "PHP_AUTH_PW: " . ($_SERVER['PHP_AUTH_PW'] ?? '') . "<br>";

// HTTPS
echo "HTTPS: " . ($_SERVER['HTTPS'] ?? '') . "<br>";
echo "HTTP_X_HTTPS: " . ($_SERVER['HTTP_X_HTTPS'] ?? '') . "<br>";
echo "REDIRECT_HTTPS: " . ($_SERVER['REDIRECT_HTTPS'] ?? '') . "<br>";

// Проверка на https и редирект
if(($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') != 'https') {          
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
    exit();
}

// GET-параметры и URL
echo "QUERY_STRING: " . ($_SERVER['QUERY_STRING'] ?? '') . "<br>";
echo "REDIRECT_URL: " . ($_SERVER['REDIRECT_URL'] ?? '') . "<br>";

// Заголовки браузера
echo "HTTP_USER_AGENT: " . ($_SERVER['HTTP_USER_AGENT'] ?? '') . "<br>";
echo "HTTP_COOKIE: " . ($_SERVER['HTTP_COOKIE'] ?? '') . "<br>";
echo "HTTP_REFERER: " . ($_SERVER['HTTP_REFERER'] ?? '') . "<br>";
echo "HTTP_ACCEPT: " . ($_SERVER['HTTP_ACCEPT'] ?? '') . "<br>";
echo "HTTP_ACCEPT_ENCODING: " . ($_SERVER['HTTP_ACCEPT_ENCODING'] ?? '') . "<br>";
echo "HTTP_ACCEPT_LANGUAGE: " . ($_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '') . "<br>";
echo "HTTP_ACCEPT_CHARSET: " . ($_SERVER['HTTP_ACCEPT_CHARSET'] ?? '') . "<br>";
echo "HTTP_CONNECTION: " . ($_SERVER['HTTP_CONNECTION'] ?? '') . "<br>";
echo "HTTP_CACHE_CONTROL: " . ($_SERVER['HTTP_CACHE_CONTROL'] ?? '') . "<br>";
echo "HTTP_UPGRADE_INSECURE_REQUESTS: " . ($_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'] ?? '') . "<br>";


Особенности и рекомендации


📍 Не доверяйте напрямую данным из заголовков. 
Все ключи, начинающиеся с HTTP_, формируются на основе заголовков клиента — они могут быть подделаны. Поэтому для критичных задач (аутентификация, безопасность) данные нужно дополнительно проверять или фильтровать.


📍 Проверяйте существование ключей.
Перед использованием того или иного индекса массива $_SERVER рекомендуется проверять его наличие с помощью isset() или array_key_exists(). Это предотвратит ошибки на некоторых серверах.


📍 Используйте фильтры при работе с пользовательскими данными.
Если вы используете значения из $_SERVER в выводе или логике приложения (например, $_SERVER['HTTP_HOST']), применяйте фильтрацию через функции типа filter_var() или другие методы защиты. Это особенно важно при генерации ссылок или перенаправлений.


Заключение!

Суперглобальный массив $_SERVER — один из главных инструментов для работы с информацией о запросе и окружении сервера в PHP. Он предоставляет быстрый доступ к широкому спектру данных, которые могут быть полезны при построении логики обработки запросов, отчётности, маршрутизации или анализа поведения пользователей. Правильное использование $_SERVER делает ваш код более гибким и информативным, но требует внимательного подхода к безопасности и проверке данных.

Кто читал
Онлайн / История (30 дней)
2
Online (1)
История (2)
❓ Unknown Desktop
Привет! Похоже, Вы ещё не вошли на сайт.
Чтобы получить полный доступ, зарегистрируйтесь или войдите под своим именем.