27  /  334

Настройка параметров ядра

Просмотров: 92159 (Статистика ведётся с 06.02.2017)
Дата последнего изменения: 06.07.2018
Роберт Басыров
Сложность урока:
5 уровень - сложно, но не смертельно. Нужно подумать, вспоминать уже пройденный материал, собрать в кучу внимание, немного терпения и всё получится.
1
2
3
4
5

Особый файл

Bitrix Framework имеет ряд специфичных настроек ядра, которые не имеют визуального интерфейса редактирования. Этот подход вызван тем, что изменение настроек или ошибка в них легко могут привести к неработоспособности системы (настройки подключения к базе данных, настройки кеширования и т.д.).

Настройки в новом ядре выполняются в файле /bitrix/.settings.php. Напомним, что в старом ядре аналогичные настройки выполнялись в файле /bitrix/php_interface/dbconn.php. Файл .settings.php структурно сильно отличается от прежнего dbconn.php.

Примечание: т.к. в системе параллельно используются 2 ядра - старое и новое ядро D7, то и оба файла настроек используются одновременно. Поэтому необходимо производить настройки обоих файлов.

Даже если вы используете код только старого ядра, то файл .settings.php должен быть создан. Возможна ситуация, когда при установке обновлений какой-то из встроенных механизмов системы будет переписан на новое ядро. Если этот файл корректно не настроен, то это может привести к неработоспособности системы.

Иногда бывают ситуации, что файл .settings.php отсутствует. Его можно создать в автоматическом режиме, если выполнить в командной строке Командная PHP-строка - инструмент системы, позволяющий запускать произвольный код на PHP с вызовами функций. Подробнее... : Bitrix\Main\Config\Configuration::wnc();.

Править параметры можно с помощью класса Configuration (Bitrix\Main\Config\Configuration).

Примечание: Некоторые секции файла настроек содержат параметр readonly. Этот параметр означает, что данные настройки не будут изменены через API.

Кроме этого настройки могут задаваться в файле .settings_extra.php. Базовый файл настроек содержит неизменные настройки, к которым есть API. Файл .settings_extra.php может содержать произвольный код, который меняет настройки динамически. Соответственно к нему нет API.


Описание параметров

Ниже описаны параметры, которые возможны для изменения:

  • Секция cache
  • Секция exception_handling
  • Секция connections
  • Корневая секция
  • Секция pull
  • Секция http_client_options
  • Секция cache

    Отвечает за настройки кеширования, позволяет задать способ кеширования и его параметры.

      'cache' => array (
        'value' => array (
          'type' => 'files',
        ),
        'readonly' => false,
      ),
    Параметр Значение
    type В качестве значения можно задать:
    • memcache
    • apc
    • xcache
    • files
    • none
    или указать массив со значениями:
    • class_name - класс, реализующий интерфейс ICacheEngine,
    • required_file - подключаемый файл с путем относительно папки /bitrix или /local (если требуется),
    • required_remote_file - подключаемый файл с абсолютным путем (если требуется),
    • extension - будет произведена попытка подключения расширения через extension_loaded. И только тогда подключится уже указанный класс.
    Внимание!В PHP 7 не поддерживается php_memcache и могут быть проблемы.
    cache_flags Запрет на кеширование выборки или изменение ttl. Для этого установите ключи, куда входит название таблицы и суффиксы:
    'cache_flags'=>   array(
          'value'=> array(
             "b_group_max_ttl" => 200,
             "b_group_min_ttl" => 100,
          )
       ),

    Устанавливая b_group_max_ttl = 0, администратор запрещает кеширование этой сущности. Устанавливая b_group_min_ttl = 86400, админ расширяет наш TTL до суток (если в коде написано 3600).

    Примечание: Кроме type могут быть дополнительные параметры, если они нужны конкретному классу кеширования.

    Примечание: Настройки memcache могут задаваться так же в файле /bitrix/.settings_extra.php.

    Пример файла /bitrix/.settings_extra.php

    В базовом файле .settings.php содержатся неизменные настройки, к которым есть API. Файл .settings_extra.php может содержать произвольный код, который меняет настройки динамически в зависимости от каких-либо факторов. Соответственно для изменения настроек в этом файле нет API. Естественно в ходе выполнения этого произвольного кода должен быть возвращен массив подобной структуры базового файла.


    Секция exception_handling

    Отвечает за обработку ошибок.

      'exception_handling' => array (
        'value' => array (
          'debug' => false,
          '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' => array (
            'settings' => array (
              'file' => 'bitrix/modules/error.log',
              'log_size' => 1000000,
            ),
          ),
        ),
        'readonly' => false,
      ),
    Параметр Значение
    debug Ключ отвечает за то, будет ли выведена ошибка на страницу в браузере. Выводить ошибки рекомендуется только на время разработки или отладки. Иначе потенциально может быть разглашение информации.
    handled_errors_types В ключе задаются типы ошибок, которые система отлавливает (не игнорирует).
    exception_errors_types В ключе задаются типы ошибок, при которых система выбрасывает исключение.
    ignore_silence Ключ отменяет действие оператора управления ошибками (@).
    log В ключе задаются параметры логирования ошибок. Если ключа нет - логирования не будет. Если задать как показано в примере:
    'log' => array (
       'settings' => array (
          'file' => 'bitrix/modules/error.log',
          'log_size' => 1000000,
       ),
    ),
    то логироваться будет в файл с ограничением его размера. Если в корне сайта лежит файл error.php и выключен вывод ошибок на экран, то этот файл будет подключен в случае возникновения необработанного исключения.
    Если задать в общем случае, то можно логгировать куда угодно:
    'log' => array(
       'class_name' => 'MyLog', // custom log class, must extends ExceptionHandlerLog; 
                                // can be omited, in this case default Diag\FileExceptionHandlerLog will be used
       'extension' => 'MyLogExt', // php extension, is used only with 'class_name'
       'required_file' => 'modules/mylog.module/mylog.php' // included file, is used only with 'class_name'
       'settings' => array( // any settings for 'class_name'
          ),
    ),

    В приведенном примере:

    • class_name - пользовательский класс, наследуемый от \ExceptionHandlerLog. Может быть не указан. В этом случае будет использоваться \Bitrix\Main\Diag\FileExceptionHandlerLog.
    • extension - расширение PHP, использовать можно только вместе с class_name.
    • required_file - включаемый файл. Используется только вместе с class_name.
    • settings - настройки для класса, указанного в class_name
    assertion_throws_exception Включение поддержки команды assert.
    assertion_error_type В ключе задаются типы ошибок, для которых не верный assert выбрасывает исключение.

    В handled_errors_types, exception_errors_types, assertion_error_type необходимо передать тип ошибки. Тип ошибки представляет из себя числовой код. Но коды знать и помнить не нужно. Например, параметр exception_errors_types. Что означает данная запись: E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING?

    Для начала обратимся к уровням ошибок интерпретатора PHP. Есть определенные значения и определенные константы, которые им соответствуют. В нашем же случае данная запись означает, что E_ALL (значение константы 2047), побитовое и не E_NOTICE, и не E_WARNING и не E_STRICT и не E_USER_WARNING и не E_USER_NOTICE и не E_COMPILE_WARNING. То есть E_ALL за исключением далее указанных констант, которые определяют тот или иной уровень ошибок интерпретатора PHP.


    Секция connections

    Параметры соединения с базой данных и другими источниками данных. Задается имя класса и параметры соединения.

    'connections' => array (
            'value' => array (
                'default' => array (
                    'className' => '\\Bitrix\\Main\\DB\\MysqlConnection',
                    'host' => 'localhost:31006',
                    'database' => 'admin_bus',
                    'login' => 'admin_bus',
                    'password' => 'admin_bus',
                    'options' => 2,
                    'handlersocket' => array (
                        'read' => 'handlersocket',
                    ),
                ),
                'handlersocket' => array (
                    'className' => '\\Bitrix\\Main\\Data\\HsphpReadConnection',
                    'host' => 'localhost',
                    'port' => '9998',
                ),
            ),
            'readonly' => true,
        ),

    Внимание: Начиная с версии ядра 14.5.2 и выше возможно использование расширения mysqli.
    'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
    
    Также для этого в PHP должно быть установлено расширение mysqli, дополнительные проверки на наличие расширения не производятся! Включать mysqli нужно отдельно для старого (dbconn.php) и нового (.settings.php) ядра.

    Параметр Значение
    options Задаются флаги постоянного соединения и отложенности соединения с базой. Например:
    Connection::PERSISTENT == 1
    Connection::DEFERRED == 2
    Можно записывать их комбинации с помощью битовых операций. Например 3 - это и PERSISTENT, и DEFERRED.
    handlersocket В ключе указывается, какое соединение использовать для чтения (ключ read). Необходимо создать подключение, где будут указаны класс, хост и порт. В примере кода выше установлен параметр read, у которого указано значение handlersocket. А ниже собственно описание для соединения handlersocket.
    className имя класса, в которой собственно реализуется работа с конкретным типом БД.
    host имя хоста, где находится база данных. можно указать с портом
    database имя базы
    login логин пользователя базы данных
    password пароль пользователя базы данных

    Примечания:
    В рамках ORM возможна работа с несколькими базами данных.
    Для использования соединения handlersocket должна быт установлена библиотека HSPHP - PHP HandlerSocket client


    Корневая секция

    В корневой секции размещаются настройки общего характера.

    Параметр Значение
    disable_iconv Запрещает использование библиотеки iconv. Аналог константы BX_ICONV_DISABLE в старом ядре.

    Секция pull

    Эта секция реально нужна только для хостинг-партнеров (для автоматизации развертывания), для всех остальные рекомендуется использовать настройку через административный интерфейс.

    'pull' => Array(
           'value' =>  array(
               'path_to_listener' => "http://#DOMAIN#/bitrix/sub/";,
               'path_to_listener_secure' => "https://#DOMAIN#/bitrix/sub/";,
               'path_to_modern_listener' => "http://#DOMAIN#/bitrix/sub/";,
               'path_to_modern_listener_secure' => "https://#DOMAIN#/bitrix/sub/";,
               'path_to_mobile_listener' => "http://#DOMAIN#:8893/bitrix/sub/";,
               'path_to_mobile_listener_secure' => "https://#DOMAIN#:8894/bitrix/sub/";,
               'path_to_websocket' => "ws://#DOMAIN#/bitrix/subws/",
               'path_to_websocket_secure' => "wss://#DOMAIN#/bitrix/subws/",
               'path_to_publish' => 'http://127.0.0.1:8895/bitrix/pub/',
               'nginx_version' => '3',
               'nginx_command_per_hit' => '100',
               'nginx' => 'Y',
               'nginx_headers' => 'N',
               'push' => 'Y',
               'websocket' => 'Y',
               'signature_key' => '1111111111',
               'signature_algo' => 'sha1',
               'guest' => 'N',
           ),
       ),
    Параметр Значение
    path_to_listener путь для подключения к серверу (http) для получения команд
    path_to_listener_secure путь для подключения к серверу (https) для получения команд
    path_to_modern_listener путь для подключения к серверу для современных браузеров (http) для получения команд
    path_to_modern_listener_secure путь для подключения к серверу для современных браузеров (https) для получения команд
    path_to_websocket путь для подключения к серверу для современных браузеров с поддержкой веб-сокетов (http) для получения команд
    path_to_websocket_secure путь для подключения к серверу для современных браузеров с поддержкой веб-сокетов (https) для получения команд
    path_to_publish путь для публикации команд со стороны сервера
    path_to_publish_web путь для публикации команд со стороны браузера (http)
    path_to_publish_web_secure путь для публикации команд со стороны браузера (https)
    nginx_version версия сервера очередей
    nginx_command_per_hit количество каналов в который будут отправлены одинаковые данные за один хит
    nginx включен ли сервер очередей
    nginx_headers нужно ли отправлять специальные заголовки
    push включен ли сервер очередей
    websocket активны ли веб-сокеты
    signature_key секретный ключ-подпись сообщений
    signature_algo алгоритм шифрования подписи
    guest модуль активен ли для гостей
    enable_protobuf включен ли новый формат сообщений
    limit_max_payload максимальный размер сообщения в байтах
    limit_max_messages_per_request максимальное количество сообщений за один хит
    limit_max_channels_per_request максимальное количество каналов за один хит

    Секция http_client_options

    Секция задаёт опции по умолчанию для класса Bitrix\Main\Web\HttpClient.

    Параметр Значение
    redirect по умолчанию true, проиводить редирект
    redirectMax максимальное число таких редиректов (по умолчанию 5)
    waitResponse если true, то - ожидание ответа (по умолчанию), в ином случае - сразу возврат ответа
    socketTimeout время ожидания ответа в секундах (по умолчанию 30)
    streamTimeout таймаут потока в секундах (по умолчанию 60)
    version версия http - 1.0 или 1.1 (по умолчанию 1.0)
    proxyHost / proxyPort / proxyUser / proxyPassword группа параметров для установки прокси
    compress если true, будет послан Accept-Encoding: gzip
    charset кодировка для тела объекта (используется в поле заголовка запроса Content-Type для POST и PUT)
    disableSslVerification если true, верификация ssl-сертификатов производиться не будет

    Пример настройки:

      'http_client_options' =>
       array (
         'value' =>
            array (
             'redirect' => true,//делаем редиректы, если требуется
             'redirectMax' => 10,//но не более 10
             'version' => '1.1'//работаем по протоколу http 1.1
            ),
         'readonly' => false,
       ),

    Правильно ли вы указали настройки, можно проверить так:

    use Bitrix\Main\Config\Configuration;
    print_r(Configuration::getValue("http_client_options"));

    Должен быть выведен ваш массив.

    Список ссылок по теме:

    • Пример скрипта для редактирования настроек. (блог)


    38
    Курсы разработаны в компании «1С-Битрикс»

    Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
    Развернуть комментарии