При работе с веб-приложениями на платформе 1С-Битрикс может возникнуть необходимость получать различную информацию о сервере — от адреса и порта до HTTP-хостов и запрошенного URI. Для решения подобных задач в 1С-Битрикс существует специальный класс \Bitrix\Main\Server
, который расширяет функционал \Bitrix\Main\Type\ParameterDictionary
.

В данной статье мы разберём, как пользоваться этим классом, какие методы он предоставляет и приведём примеры использования. Статья будет полезна как начинающим, так и опытным разработчикам, которые создают и поддерживают проекты на 1С-Битрикс.
1. Общая информация о классе Server
Класс Server располагается в файле:
bitrix/modules/main/lib/server.php
Он наследует функциональность от \Bitrix\Main\Type\ParameterDictionary
, благодаря чему предоставляет методы для безопасного доступа к массиву $_SERVER
и ряду дополнительных серверных переменных.
Основные задачи Server
:
- Получение значений из суперGLOBALS-массива
$_SERVER
удобным и более «безопасным» способом. - Предоставление специализированных методов для популярных параметров вроде
DOCUMENT_ROOT
,SERVER_NAME
,HTTP_HOST
,REQUEST_URI
и т. п. - Возможность фильтрации данных, если необходимо внести корректировки в значения (например, при модификации
REQUEST_URI
).
Как получить объект Server
Чаще всего объект Server
извлекают из текущего контекста:
use Bitrix\Main\Context;
// Способ №1
$context = Context::getCurrent();
$server = $context->getServer();
// Способ №2 (более кратко)
$server = Context::getCurrent()->getServer();
Получив объект Server
, вы можете использовать все методы, доступные этому классу, чтобы работать с информацией о сервере.
2. Конструктор класса
public \Bitrix\Main\Server::__construct(array $arServer)
Это нестатический метод, который вызывается при создании экземпляра класса. Обычно нет нужды создавать объект Server
напрямую, так как он уже создаётся движком 1С-Битрикс и предоставляется через контекст. Однако, если вам по каким-то причинам нужно вручную создать объект, можете вызвать конструктор так:
$arServer = $_SERVER; // например, взяли текущий массив $_SERVER
$serverObj = new \Bitrix\Main\Server($arServer);
Внутри конструктора могут быть применены фильтры и дополнительные операции по приведению к единому формату (например, убираются лишние слэши в DOCUMENT_ROOT
).
3. Ключевые методы Server
Ниже представлены наиболее востребованные методы класса \Bitrix\Main\Server
с кратким описанием и примерами.
3.1. getDocumentRoot()
Описание: Возвращает значение DOCUMENT_ROOT
— корневую директорию сайта на сервере.
Пример:
$documentRoot = $server->getDocumentRoot();
echo $documentRoot;
// Например, выведет что-то вроде /var/www/html/bitrix
3.2. getPersonalRoot()
Описание: Возвращает папку BX_PERSONAL_ROOT
. Если эта переменная на сервере не определена, по умолчанию возвращается строка /bitrix
.
Пример:
$personalRoot = $server->getPersonalRoot();
// Если BX_PERSONAL_ROOT не задан, вернёт /bitrix
3.3. getHttpHost()
Описание: Возвращает HTTP-хост (HTTP_HOST
).
Пример:
$httpHost = $server->getHttpHost();
echo $httpHost;
// Например, site.ru
3.4. getServerName()
Описание: Возвращает имя сервера (SERVER_NAME
).
Пример:
$serverName = $server->getServerName();
echo $serverName;
// Может содержать, например, имя виртуального хоста.
3.5. getServerAddr()
Описание: Возвращает IP-адрес сервера (SERVER_ADDR
).
Пример:
$serverAddr = $server->getServerAddr();
echo $serverAddr;
// Например, 127.0.0.1
3.6. getServerPort()
Описание: Возвращает порт сервера (SERVER_PORT
).
Пример:
$serverPort = $server->getServerPort();
echo $serverPort;
// Например, 80 или 443
3.7. getRequestUri()
Описание: Возвращает запрошенный URI (REQUEST_URI
). Содержит как путь, так и строку запроса, например /index.php/test1/test2?login=yes
.
Пример:
$requestUri = $server->getRequestUri();
echo $requestUri;
// Например, /index.php/test1/test2?login=yes
3.8. getRequestMethod()
Описание: Возвращает метод HTTP-запроса (REQUEST_METHOD
), например GET
или POST
.
Пример:
$method = $server->getRequestMethod();
if ($method === 'POST') {
// Выполнить действия для POST-запроса
}
3.9. getPhpSelf()
Описание: Возвращает значение PHP_SELF
. Оно может содержать путь к скрипту с дополнительными сегментами.
Пример:
$phpSelf = $server->getPhpSelf();
echo $phpSelf;
// Например, /index.php/test1/test2
3.10. getScriptName()
Описание: Возвращает значение SCRIPT_NAME
. Как правило, это путь к исполняемому PHP-файлу (например, /index.php
).
Пример:
$scriptName = $server->getScriptName();
echo $scriptName;
// Например, /index.php
3.11. Получение произвольных значений из $_SERVER
Любое значение, доступное в массиве $_SERVER
, можно получить методом get
, передав ключ:
$accept = $server->get('HTTP_ACCEPT');
$userAgent = $server->get('HTTP_USER_AGENT');
Данный подход удобен, когда нет специализированного метода в классе, но нужно получить конкретный заголовок или переменную сервера.
4. Практические примеры использования
Рассмотрим краткий пример, как можно применить методы класса Server
на практике. Допустим, нам нужно в компоненте или в коде обработчика события вывести на экран некоторые сведения о сервере, а затем выполнить логику в зависимости от метода запроса:
use Bitrix\Main\Context;
$server = Context::getCurrent()->getServer();
// Получаем базовую информацию
$docRoot = $server->getDocumentRoot();
$host = $server->getHttpHost();
$serverName = $server->getServerName();
$serverAddr = $server->getServerAddr();
$serverPort = $server->getServerPort();
$requestUri = $server->getRequestUri();
$requestMethod = $server->getRequestMethod();
// Выводим для наглядности (на продакшене обычно логируем, а не выводим)
echo 'DOCUMENT_ROOT: '.$docRoot.'
';
echo 'HTTP_HOST: '.$host.'
';
echo 'SERVER_NAME: '.$serverName.'
';
echo 'SERVER_ADDR: '.$serverAddr.'
';
echo 'SERVER_PORT: '.$serverPort.'
';
echo 'REQUEST_URI: '.$requestUri.'
';
echo 'REQUEST_METHOD: '.$requestMethod.'
';
// Пример простой проверки
if ($requestMethod === 'GET') {
// Логика для GET-запроса
echo 'Это GET-запрос';
} elseif ($requestMethod === 'POST') {
// Логика для POST-запроса
echo 'Это POST-запрос';
} else {
// Логика для иных методов (PUT, DELETE и т.д.)
echo 'Это другой метод HTTP-запроса';
}
5. Рекомендации и лучшие практики
- Используйте Context
Вместо прямого доступа к глобальному массиву
$_SERVER
всегда лучше пользоваться методомContext::getCurrent()->getServer()
. Так вы защищаете код от потенциальных изменений внутренних структур и получаете более безопасный интерфейс. - Проверяйте значения
Если необходимо работать с некоторыми переменными (например, HTTP-заголовками), проверяйте, что значение не пустое. При необходимости используйте
isset($value)
или более сложную логику валидации. - Логируйте важные параметры
При отладке или расследовании сбоев может пригодиться логирование значений из массива
$_SERVER
. КлассServer
упрощает доступ к этим данным и помогает аккуратнее их обрабатывать. - Не храните конфиденциальные данные в server-переменных Помните, что некоторые заголовки или пути могут содержать конфиденциальную информацию. Внимательно следите, чтобы не выводить такую информацию публично и не хранить в логах в открытом виде.
- Используйте фильтры
Класс
Server
позволяет добавлять фильтры (методaddFilter
). Это полезно, если нужно массово обработать (например, преобразовать, отфильтровать) входящие значения$_SERVER
перед использованием в коде.
6. Заключение
Класс Server в 1С-Битрикс — это удобный инструмент для получения и управления данными, которые обычно хранятся в $_SERVER
. Он упрощает доступ к часто используемым переменным, обеспечивает определённую безопасность и позволяет более элегантно писать код, соответствующий стандартам платформы.
Используя методы Server
, вы сможете легко получать сведения о серверной среде, структуре запросов и HTTP-заголовках, а также при необходимости модифицировать их. Это особенно полезно при разработке комплексных решений, где важно чётко знать контекст выполнения скрипта или при создании интеграций и модулей для проектов на 1С-Битрикс.
Если вы ещё не применяли класс Server
в своих проектах, попробуйте заменить прямой доступ к $_SERVER
на использование методов, описанных в статье. Это сделает ваш код более надёжным, поддерживаемым и в духе «родных» практик 1С-Битрикс.