Функция cot_diefatal в Cotonti

Назначение функции cot_diefatal, используется для немедленного завершения выполнения скрипта с сообщением о фатальной ошибке. Функция предоставляет подробное сообщение об ошибке, включая стек вызовов (backtrace), если включено отображение ошибок, или записывает краткую информацию в журнал ошибок, если ошибки скрыты.

/**
 * Прерывает выполнение скрипта с фатальной ошибкой
 *
 * @param string $text Причина
 * @param string $title Заголовок сообщения
 */
function cot_diefatal($text = 'Reason is unknown.', $title = 'Fatal error')
{
    // cot class can be not initialised yet
    global $cfg;

    if ($cfg['display_errors']) {
        $mainTitle = isset($cfg['maintitle']) ? $cfg['maintitle'] : $cfg['mainurl'];
        $message_body = '<p><em>' . @date('Y-m-d H:i') . '</em></p>';
        $message_body .= '<p>' . $text . '</p>';
        ob_clean();
        debug_print_backtrace();
        $backtrace = ob_get_contents();
        ob_clean();
        $message_body .= '<pre style="overflow:auto">' . $backtrace . '</pre>';
        $message_body .= '<hr /><a href="' . $cfg['mainurl'] . '">' . $mainTitle . '</a>';
        cot_die_message(500, true, $title, $message_body);
    } else {
        $backtrace = debug_backtrace();
        if (isset($backtrace[1])) {
            $text .= ' in file ' . $backtrace[1]['file'] . ' at line ' . $backtrace[1]['line']
                . ' function ' . $backtrace[1]['function'] . '(' . implode(', ', $backtrace[1]['args']) . ')';
        }

        error_log("$title: $text");
        cot_die_message(503, true);
    }
}

 

 


Алгоритм работы функции:
Проверка глобальной переменной $cfg:

Функция предполагает, что Cot::$cfg может быть не инициализирован. Поэтому используется глобальная переменная $cfg.
Если отображение ошибок включено ($cfg['display_errors']):

Получается основное название сайта или URL ($cfg['maintitle'] или $cfg['mainurl']).
Создается тело сообщения об ошибке, включающее текущее время, текст ошибки и стек вызовов.
Стек вызовов получается с помощью debug_print_backtrace(), а затем выводится в <pre> для удобства чтения.
После формирования сообщения вызывается функция cot_die_message с кодом ошибки 500 и детализированным сообщением.
Если отображение ошибок выключено:

Получается стек вызовов с помощью debug_backtrace().
Если есть информация о предыдущем вызове функции, добавляется имя файла, строка и функция, где произошла ошибка.
Ошибка записывается в журнал с помощью error_log.
Вызывается cot_die_message с кодом ошибки 503 и без детализированного сообщения.

Пример использования:

Если в какой-то части кода возникает непредвиденная ошибка, которую невозможно обработать стандартными средствами, можно вызвать cot_diefatal для немедленного завершения скрипта и вывода сообщения об ошибке для отладки (если отображение ошибок включено) или записи в журнал (если отключено).

2 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 22.01.2025 09:31
  • Последнее обновление: 22.01.2025 09:31