Skip to content

main.php

Aleksey Perevoshchikov edited this page Mar 20, 2017 · 7 revisions

Файл main.php является главным конфигурационным файлом. Его полное имя должно быть передано в \Peraleks\ErrorHandler\Core\ErrorHandler::instance($file) при подключении ErrorHandler.

Определение режимов: development, production и cli.

ErrorHandler использует отложенную инициализацию конфигурации. То есть конфигурационные файлы будут подключены в скрипт только после того как произойдёт первая ошибка.

Development режим задаётся при помощи глобальной константы 'DEVELOPMENT_MODE'.
Имя константы может быть любым и задаётся во второй строке.

define('DEVELOPMENT_MODE', true);

$modeConstant = 'DEVELOPMENT_MODE';

Для чего это нужно?

Во первых сама константа нужна для отложенной инициализации режима.

Например в вашем проекте уже есть общий конфигурационный файл, в котором определяется режим работы для всего приложения. Если для этого вы уже используете глобальную константу, то строку define('DEVELOPMENT_MODE', true); вы можете просто удалить, а переменной $modeConstant присвоить имя вашей константы.

До тех пор пока константа не определена и не равна true, ErrorHandler будет работать в production режиме.

Если вы инициализируете режим работы приложения каким-то другим способом, то можете просто перенести строку define('DEVELOPMENT_MODE', true); в ваш общий конфигурационный файл, чтобы все важные настройки были собраны в одном месте.

Так же вы можете просто оставить всё как есть и задавать режим для ErrorHandler отдельно от настроек вашего приложения.

Далее в файле main.php реализована логика выбора режима.

if (PHP_SAPI === 'cli') {
    $config = __DIR__.'/configCLI.php';
} elseif (defined($modeConstant) && true === constant($modeConstant)) {
    $config = __DIR__.'/configDEV.php';
    $mode = 'dev';
} else {
    $config = __DIR__.'/configPROD.php';
}

Здесь всё достаточно просто, как вы видите. В зависимости от режима, переменной $config присваивается полное имя дополнительного конфигурационного файла. Этот файл будет подключен ниже.

Для того, чтобы инвертировать константу 'DEVELOPMENT_MODE' в 'PRODUCTION_MODE', надо поменять местами строчки $config = __DIR__.'/configDEV.php'; и $config = __DIR__.'/configPROD.php';
Конечно же вы вправе написать полностью свою собственную логику выбора режима. Например в зависимости от IP-адреса или типа клиента, cookie и т.д.

$trace = E_ERROR | E_RECOVERABLE_ERROR;

В этой строке переменной $trace присваивается битовая маска, определяющая для каких ошибок надо показать стек вызовов. Переменная будет использована в дополнительных подключаемых файлах (configCLI.php, configDEV.php, configPROD.php).

Далее формируется и возвращается массив конфигурации.

return [
    'SELF_LOG_FILE'   => '',
    'ERROR_REPORTING' => E_ALL,
    'APP_DIR'         => 'default',
    'NOTIFIERS'       => require $config,
    'MODE'            => $mode ?? 'prod',
];
параметр тип значение
'SELF_LOG_FILE' string Задаёт полное имя файла, в который ErrorHandler будет записывать свои внутренние ошибки. Если передана пустая строка, будет назначено значение по умолчанию: $_SERVER['DOCUMENT_ROOT']. '/error_handler_xxxxxxxxxx.log, где xxxxxxxxxx crc32-хеш, добавленный из соображений безопасности.
'ERROR_REPORTING' int Битовая маска, определяющая какие ошибки будут обработаны. Аналогия error_reporting в PHP.
Имеет приоритет над параметром уведомителей 'enadle', но может быть им понижен.
Выключить все ошибки: 0.
'APP_DIR' string Полный путь к корневой папке вашего приложения. Используется уведомителями для сокращённого показа имён файлов в отчёте (для удобства), и больше ни на что не влияет. Если передана строка 'default' будет назначено значение по умолчанию: dirname($_SERVER['DOCUMENT_ROOT']).
'NOTIFIERS' array Массив уведомителей, который вернёт один из подключенных конфигурационных файлов (configCLI.php, configDEV.php, configPROD.php).
'MODE' string Требуется только для внутреннего обработчика ошибок. Если передана строка 'dev' внутренняя ошибка будет не только записана в лог-файл но и показана в браузере.
По умолчанию: prod.


Clone this wiki locally