Конфигурация ядра
Критически важные настройки ядра хранятся в файле конфигурации. Это защищает их от случайного изменения через административный раздел и повышает безопасность.
Основной файл конфигурации — /bitrix/.settings.php. Менять настройки в нем можно вручную или через API.
Ошибки в настройках .settings.php могут нарушить работоспособность сайта. Перед изменениями создайте резервную копию.
Файл dbconn.php
Архитектура Bitrix Framework использует два ядра: современное D7 и старое ядро.
-
/bitrix/.settings.php— для ядра D7. -
/bitrix/php_interface/dbconn.php— для старого ядра.
Файл dbconn.php содержит константы для обратной совместимости. Система использует его вместе с .settings.php. Чтобы избежать сбоев, сохраняйте корректность настроек в обоих файлах, даже если работаете только с D7.
Дополнительный файл конфигурации
Чтобы менять настройки динамически без API, создайте файл /bitrix/.settings_extra.php. Система автоматически объединит его настройки с основным файлом.
Папка для разработки
Начиная с версии Главного модуля 24.100.0 конфигурационные файлы можно хранить в папке /local/:
-
.settings.phpи.settings_extra.php— в корне/local/, -
dbconn.php— в папке/local/php_interface/.
Подробнее о папке /local/ в статье Структура директорий.
Секции настроек
Файл .settings.php — это PHP-массив. Его структура состоит из секций для настройки компонентов ядра. Секция connections для подключения к базе данных — обязательная. Остальные секции добавляйте по необходимости.
Защита от изменений
Параметр readonly защищает секцию от изменений через API. Возможные значения:
-
true— запрещает изменение настроек после инициализации ядра, например, параметров базы данных. -
false— разрешает менять настройки во время работы приложения, например, детали обработки ошибок.
Параметры соединения с базой данных
Секция connections хранит параметры для подключения к основному и дополнительным источникам данных. Здесь указываются хосты, логины, пароли и имена баз данных.
'connections' => [
'value' => [
// Основное соединение с базой данных
'default' => [
'className' => \Bitrix\Main\DB\MysqliConnection::class, // Используем драйвер MySQLi для соединения
'host' => 'localhost', // Хост базы данных
'database' => 'busik', // Имя базы данных
'login' => 'db_user', // Имя пользователя БД
'password' => '***', // Пароль пользователя БД
'options' => 2, // Дополнительные опции соединения, 2 — отложенное соединение
],
],
'readonly' => true, // Запрещает изменение настроек во время выполнения скрипта
],
Подробнее в статье Конфигурация БД.
Обработка ошибок
Секция exception_handling управляет реакцией приложения на ошибки и исключения. Она задает правила вывода на экран, логирования и определения критичных ошибок.
'exception_handling' => [
'value' => [
'debug' => true,
'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE,
'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED,
'ignore_silence' => false,
'assertion_throws_exception' => true,
'assertion_error_type' => 256,
'log' => [
'settings' => [
'file' => 'bitrix/modules/error.log',
'log_size' => 1000000,
],
],
],
'readonly' => false,
],
-
debug— определяет, показывать ли ошибки в браузере.-
true— только для разработки. На боевых серверах может привести к раскрытию стека вызовов, путей файлов и других конфиденциальных данных. -
false— обязательно для боевого сервера. Ошибки не показываются пользователю. Для анализа ошибок нужно настроить секциюlog.
-
-
handled_errors_types— маска типов ошибок, которые система будет обрабатывать. -
exception_errors_types— маска типов ошибок, при которых система выбросит исключение. -
ignore_silence— отменяет действие оператора подавления ошибок@, если значениеtrue. -
assertion_throws_exception— преобразует неудачныеassert()в исключения. -
assertion_error_type— тип ошибки для исключений изassert(). -
log— настройки логирования ошибок. Если параметр не задан, логирование отключено.
Маски типов ошибок
Параметры handled_errors_types и exception_errors_types используют битовые маски. Битовая маска — это число, где каждый бит отвечает за включение или выключение конкретного типа ошибки. Например, E_ALL & ~E_NOTICE означает все типы ошибок, кроме уведомлений.
Основные типы ошибок:
-
E_ERROR— критические ошибки, -
E_WARNING— предупреждения, -
E_PARSE— ошибки парсинга, -
E_NOTICE— уведомления, -
E_STRICT— сообщения о совместимости, -
E_DEPRECATED— предупреждения об устаревших функциях, -
E_ALL— все ошибки и предупреждения.
Настройка логирования
Чтобы логировать ошибки в файл с ограничением размера, используйте конфигурацию log.
'log' => [
'settings' => [
'file' => 'bitrix/modules/error.log', // Путь к файлу лога относительно корня сайта
'log_size' => 1000000, // Максимальный размер файла лога в байтах
],
],
Чтобы использовать свой класс логирования, укажите параметры:
'log' => [
'class_name' => 'MyVendor\\MyLogClass', // Ваш класс, должен наследовать \ExceptionHandlerLog
'required_file' => '/local/php_interface/mylog.php', // Файл для автоподгрузки класса
'extension' => 'MyLogExt', // Расширение с классом, которое нужно загрузить. Используется вместе с class_name
'settings' => [ // Произвольные настройки для вашего класса
'some_parameter' => 'some_value',
],
],
Кеширование
В секции cache:
-
указываются механизм кеширования,
-
настраиваются параметры: тип кеша, время жизни и другие.
Пример настройки для Redis:
'cache' => [
'value' => [
'type' => [ // Настройки типа кеширования
'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineRedis', // Использовать Redis
'extension' => 'redis' // Требуемое расширение PHP
],
'redis' => [ // Параметры подключения к Redis
'host' => '127.0.0.1', // Адрес сервера
'port' => '6379', // Порт сервера
],
'sid' => $_SERVER["DOCUMENT_ROOT"]."#01" // Уникальный идентификатор сайта для разделения кеша
],
],
Подробнее в статье Кеширование.
Push & Pull сервер
Секция конфигурирует сервер очередей сообщений для работы чатов и уведомлений в реальном времени. Для стандартных проектов рекомендуется настраивать Push & Pull сервер в административном разделе. Секция в конфигурационном файле нужна в первую очередь для хостинг-партнеров.
'pull' => [
'value' => [
// Базовые URL для подключения к серверу очередей (получение команд)
'path_to_listener' => "http://#DOMAIN#/bitrix/sub/", // HTTP
'path_to_listener_secure' => "https://#DOMAIN#/bitrix/sub/", // HTTPS
// URL для современных браузеров
'path_to_modern_listener' => "http://#DOMAIN#/bitrix/sub/", // HTTP
'path_to_modern_listener_secure' => "https://#DOMAIN#/bitrix/sub/", // HTTPS
// URL для мобильных приложений
'path_to_mobile_listener' => "http://#DOMAIN#:8893/bitrix/sub/", // HTTP с портом
'path_to_mobile_listener_secure' => "https://#DOMAIN#:8894/bitrix/sub/", // HTTPS с портом
// URL для установки соединения по протоколу WebSocket
'path_to_websocket' => "ws://#DOMAIN#/bitrix/subws/", // WebSocket
'path_to_websocket_secure' => "wss://#DOMAIN#/bitrix/subws/", // Защищенный WebSocket
// URL для публикации команд на сервер очередей
'path_to_publish' => 'http://127.0.0.1:8895/bitrix/pub/', // Внутренний URL с сервера
'path_to_publish_web' => 'http://#DOMAIN#/bitrix/pub/', // Публичный URL из браузера, HTTP
'path_to_publish_web_secure' => 'https://#DOMAIN#/bitrix/pub/', // Публичный URL из браузера, HTTPS
// Конфигурация сервера
'nginx_version' => '3', // Версия сервера очередей
'nginx_command_per_hit' => '100', // Количество каналов для отправки одинаковых данных за один запрос
'nginx' => 'Y', // Флаг включения сервера очередей
'nginx_headers' => 'N', // Флаг отправки специальных заголовков
// Флаги функций
'push' => 'Y', // Включить Push-сервер
'websocket' => 'Y', // Включить поддержку WebSocket
// Безопасность
'signature_key' => 'your_secret_key_here', // Секретный ключ для подписи сообщений. Укажите уникальное значение для вашего проекта
'signature_algo' => 'sha1', // Алгоритм шифрования подписи, например, sha1 или sha256
// Доступ
'guest' => 'N', // Разрешить работу для неавторизованных пользователей
// Форматы и лимиты
'enable_protobuf' => 'N', // Использовать Protocol Buffers для сообщений
'limit_max_payload' => 2097152, // Максимальный размер одного сообщения в байтах
'limit_max_messages_per_request' => 100, // Максимальное количество сообщений за один запрос
'limit_max_channels_per_request' => 100, // Максимальное количество каналов за один запрос
],
],
HTTP-клиент
Секция http_client_options задает параметры по умолчанию для класса Bitrix\Main\Web\HttpClient: таймауты, прокси, редиректы.
С версии Главного модуля 23.0.0 HttpClient поддерживает стандарт PSR-18, а также работает в режиме обратной совместимости с очередями асинхронных запросов и библиотекой сURL.
Параметры, отмеченные комментарием со звездочкой * , работают только в режиме обратной совместимости. Для новых проектов рекомендуется использовать режим PSR-18.
'http_client_options' => [
'value' => [
// Таймауты
'waitResponse' => true, // Ожидать ответ на запрос (true) или вернуть управление сразу (false)
'socketTimeout' => 30, // Таймаут соединения с сервером в секундах
'streamTimeout' => 60, // Таймаут чтения данных в секундах
// Работа с редиректами, только в режиме обратной совместимости
'redirect' => true, // * Разрешить автоматическое следование редиректам
'redirectMax' => 5, // * Максимальное количество редиректов
'version' => '1.0', // * Версия HTTP-протокола: '1.0' или '1.1'
// Прокси-сервер
'proxyHost' => 'proxy.example.com', // Адрес прокси
'proxyPort' => 3128, // Порт прокси
'proxyUser' => 'user', // Логин для аутентификации
'proxyPassword' => 'password', // Пароль для аутентификации
// SSL и безопасность
'disableSslVerification' => false, // Отключить проверку SSL-сертификатов (не используйте на боевом сайте)
'privateIp' => true, // Разрешить запросы к частным IP-адресам
'compress' => false, // Отправлять заголовок Accept-Encoding: gzip
'charset' => 'utf-8', // Кодировка для тела запроса
'bodyLengthMax' => 0, // Максимально допустимая длина тела запроса
// Обработка ответов и событий
'responseBuilder' => null, // Кастомный построитель ответов, реализует Http\ResponseBuilderInterface
'sendEvents' => true, // Отправлять события
// Отладка
'debugLevel' => \Bitrix\Main\Web\HttpDebug::NONE, // Уровень детализации отладки
'cookies' => [], // * Массив файлов cookie для отправки с запросом
'headers' => [], // * Массив HTTP-заголовков для отправки с запросом
// Использование cURL
'useCurl' => false, // Использовать библиотеку cURL вместо внутренних потоков PHP
'curlLogFile' => '', // Путь к файлу для логов cURL, если useCurl = true
],
'readonly' => false, // Разрешить изменение настроек во время выполнения
],
Регистрация сервисов
Секция services регистрирует пользовательские сервисы в контейнере зависимостей. Это позволяет централизованно управлять зависимостями приложения.
Подробнее в статье Сервис Локатор.
Логгеры
Секция loggers регистрирует логгеры с интерфейсом PSR-3.
'loggers' => [
'value' => [
// Регистрация логгера для HTTP-клиента
'main.HttpClient' => [
'className' => '\\Bitrix\\Main\\Diag\\FileLogger', // Класс логгера
'constructorParams' => ['/home/bitrix/www/log.txt'], // Путь к файлу с параметрами конструктора
'level' => \Psr\Log\LogLevel::DEBUG, // Уровень логирования: DEBUG, INFO, ERROR и так далее
'formatter' => 'formatter.Arguments', // Опционально: ID форматтера из сервис-локатора
],
// Здесь можно добавить другие логгеры
// 'my.component' => [
...
],
],
'readonly' => true, // Защищает настройки от изменений во время выполнения
],
Подробнее в статье Логгеры.
Роутинг
Секция routing определяет, какие файлы конфигурации маршрутов подключать из /bitrix/routes/ и /local/routes/.
'routing' => [
'value' => [
'config' => ['web.php'], // Можно добавить другие файлы: 'api.php', 'admin.php'
],
'readonly' => true, // Защищает настройки от изменений
],
Подробнее в статье Роутинг.
Сессии
В секции session настраивается механизм хранения сессий: файлы, Redis, БД или Memcache. Выбор механизма влияет на производительность и отказоустойчивость.
Пример конфигурации для memcache:
'session' => [
'value' => [
'mode' => 'default', // Режим работы с сессиями
'handlers' => [
'general' => [
'type' => 'memcache', // Тип хранилища
'port' => '11211', // Порт сервера
'host' => '127.0.0.1', // Хост сервера
],
],
]
]
Подробнее в статье Сессии.
Шифрование
Секция crypto хранит ключ для шифрования конфиденциальных данных. Всегда используйте уникальный ключ.
'crypto' => [
'value' => [
'crypto_key' => 'mysupersecretphrase', // Рекомендуется использовать 32-символьную строку из a-z0-9
],
'readonly' => true,
]
Подробнее в статье Cookie-файлы.
Отправка писем
Секция smtp позволяет настроить отправку почты через внешний SMTP-сервер. Доступно с версии Главного модуля 21.900.0.
Минимальная конфигурация SMTP включает хост и логин.
'smtp' => [
'value' => [
'enabled' => true, // Включить отправку через SMTP
'host' => 'smtp.host.domain', // Хост
'login' => 'user', // Логин
],
'readonly' => true,
],
Дополнительно можно указать параметры авторизации, нестандартный порт подключения, имя отправителя, таймаут и так далее.
'smtp' => [
'value' => [
'enabled' => true, // Включить отправку через SMTP
'host' => 'smtp.host.domain', // Хост
'port' => 1025, // Порт для подключения, если нужен нестандартный порт
'login' => 'user', // Логин
'password' => '123456', // Пароль для авторизации
'isOauth' => true, // Использовать OAuth-авторизацию
'from' => 'Имя отправителя', // Отображаемое имя отправителя
'connection_timeout' => 10, // Таймаут подключения к серверу в секундах
'encryption_type' => 'smtps', // Тип шифрования. Если указать 465 порт, будет использоваться `ssl`, иначе —`starttls
],
'readonly' => true,
],
Для отладки включите опцию debug и укажите путь к файлу лога logFile.
'smtp' => [
'value' => [
// ...
'debug' => true,
'logFile' => '/absolute/path/to/file.log',
],
'readonly' => true,
],
Если не указать путь logFile, система создаст файл mailer.log в корне сайта DOCUMENT_ROOT.
Расширенная конфигурация SMTP-серверов выполняется в административном интерфейсе на странице Настройки > Настройки продукта > Почтовые и СМС события > Настройки SMTP.
Очереди сообщений
Секция messenger содержит конфигурацию очередей.
'messenger' => [
'value' => [
'run_mode' => 'web', // Режим обработки сообщений: web или cli
'brokers' => [
'default' => [
'type' => DbBroker::TYPE_CODE, // Тип брокера
'params' => [ // Набор параметров, который зависит от типа брокера
'table' => MessengerMessageTable::class,
]
],
],
'queues' => [ // Список очередей
'first_queue' => [
'handler' => MyReceiver::class, // Обработчик очереди
],
],
],
]
Подробнее в статье Очереди сообщений.
Язык по умолчанию
Секция default_language задает язык по умолчанию. Система будет использовать его, если перевод для текущего языка недоступен. Это гарантирует, что интерфейс никогда не будет пустым.
'default_language' => [
'value' => 'ru', // Код языка по умолчанию, например: 'ru', 'en', 'de'
'readonly' => true, // Защищает настройку от изменений
],
Получить текущее значение можно методом Bitrix\Main\Localization\Loc::getDefaultLang(). В метод нужно передать код языка.
-
Метод проверит, есть ли переданный язык в системе.
-
Если язык недоступен, вернет значение из
default_language. -
Если
default_languageне настроен, вернет английский языкen.
Класс Configuration
Управлять настройками через API можно с помощью класса Bitrix\Main\Config\Configuration.
Создать конфигурационный файл
Если файла .settings.php нет, создайте его методом Configuration::wnc().
Bitrix\Main\Config\Configuration::wnc();
Метод wnc() полностью перезаписывает существующий файл .settings.php и удаляет текущие настройки. Используйте его только при создании нового файла.
Получить настройки секции
Статический метод getValue($name) возвращает значение указанной секции настроек.
$name— название секции, например,'cache'.
// Получить настройки кеширования
$cacheConfig = \Bitrix\Main\Config\Configuration::getValue('cache');
Установить и сохранить настройки секции
Статический метод setValue($name, $value) устанавливает значение секции и сохраняет его в конфигурационный файл.
-
$name— название секции, -
$value— массив с настройками.
// Установить и сохранить настройки для HTTP-клиента
\Bitrix\Main\Config\Configuration::setValue('http_client_options', [
'value' => [
'socketTimeout' => 60,
'streamTimeout' => 90,
],
'readonly' => false,
]);
Получить объект класса
Метод getInstance() возвращает объект класса Configuration для работы с несколькими настройками.
// Получить объект для работы с настройками
$config = \Bitrix\Main\Config\Configuration::getInstance();
Добавить или изменить параметры секции
add($name, $value) — добавляет или меняет параметры секции.
-
$name— название секции, -
$value— массив с настройками.
// Получить объект конфигурации
$config = \Bitrix\Main\Config\Configuration::getInstance();
// Добавить настройку для HTTP-клиента
$config->add('http_client_options', [
'value' => [
'socketTimeout' => 60,
'streamTimeout' => 90,
],
'readonly' => false,
]);
Добавить защищенную секцию
Метод addReadonly($name, $value) добавляет секцию с параметром 'readonly' => true.
-
$name— название секции, -
$value— массив с настройками.
// Получить объект конфигурации
$config = \Bitrix\Main\Config\Configuration::getInstance();
// Добавить защищенную настройку
$config->addReadonly('custom_section', [
'secret_key' => 'value',
]);
Сохранить настройки
Метод saveConfiguration() сохраняет все изменения из add() и addReadonly().
// Получить объект конфигурации
$config = \Bitrix\Main\Config\Configuration::getInstance();
// Изменить настройку
$config->add('exception_handling', [
'value' => ['debug' => false],
'readonly' => false,
]);
// Сохранить изменения
$config->saveConfiguration();
После add() или addReadonly() всегда вызывайте saveConfiguration(), иначе изменения не сохранятся.