Функция 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 для немедленного завершения скрипта и вывода сообщения об ошибке для отладки (если отображение ошибок включено) или записи в журнал (если отключено).
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-22 09:31
- Last update: 2025-01-22 09:31