Обработка фатальной ошибки

Наверное каждому разработчику или заказчику приходилось видеть отказ сайта, причиной которого послужила фатальная ошибка или не пойманное исключение, момент, когда интерпретатор не смог корректно завершить свою работу и вывел отладочную информацию прямо в браузер. Одно дело когда проект находится на стадии разработки или запуска, другое, когда это видят уже конечные пользователи.

Перечислю отрицательные моменты (положительных просто нет) ситуации отказа сайта:
  • пользователю выводится некорректное сообщение об ошибке
  • выводится отладочная информация, что может быть использовано злоумышленником
  • администрация сайта об этом не узнает, пока сама не “наткнется” на текущую ошибку
  • иногда ошибку трудно отловить из-за недостаточности данных протекания процесса  ее возникновения (т.е. мало отладочной информации)
  • отлаживать удаленный сервер при помощи выдачи информации в браузер, как минимум некорректно
  • авторитет ресурса (как и разработчика) теряет свои позиции
Для предотвращения подобных неблагоприятных ситуаций мы разработали модуль “Обработка фатальной ошибки”, который имеет следующие особенности:
[spoiler]
  • корректное оповещение пользователя об ошибке (с произвольным шаблоном отображения)
  • мгновенное оповещение администрации сайта о сложившейся ситуации
  • в оповещение включается основная отладочная информация, таким образом процесс “отлова” ошибки значительно облегчается
  • оповещение администрации ресурса только по уникальным в течении часа ошибкам, т.е. повторное оповещение об одной и той же ошибке будет выслано не ранее чем через час, это своего рода защита от избыточных уведомлений
  • установка и настройка модуля не требует дополнительного кодирования
При возникновении ошибки выводится заранее подготовленная страница, ее шаблон можно изменить в настройках модуля:
vyvod.jpg
По текущей идеологии интеграции продукта “1С-Битрикс”, проект имеет множество входных страниц, т.е. физических файлов на сервере соответствующих их uri адресам. Именно в таком файле происходит подключение ядра продукта. Модуль не обработает синтаксическую ошибку файла входной страницы, так как на момент проверки её синтаксиса ядро еще не загружено. Вероятность возникновения такой ситуации на рабочем проекте близка к нулю и подобную неисправность трудно не заметить в ходе реализации функционала.

Использование.

После установки модуля в его настройках, необходимо задать следующие параметры:
  • путь к шаблону для вывода ошибки, можно изменить шаблон поставляемый с модулем на любую страницу оформленную в стиле дизайна сайта
  • email адреса на которые будут присылаться оповещения, пользователи могут быть даже не зарегистрированы в системе, возможно это будет тех. поддержка web-студии
  • информация для включение в оповещение. Так как некоторая информация может быть избыточной и неудобочитаемой, данные оповещения можно выбирать в настройках
  • активность, т.е. модуль можно временно деактивировать (например для непосредственной отладки)
nastroyki.jpg

Если информации включаемой стандартно в оповещение недостаточно, существует событие “OnError” в обработчике которого можно вывести индивидуальные данные.

Пример дополнительного вывода в отладочную информацию о сервере и среде исполнения:

<?php 
 
function dumpServer() {  

   $result = "Переменная окружения \$_SERVER\n\n"; 
   $result .= var_export($_SERVER, true);  
      
     return $result;
} 

AddEventHandler("ws.fatalhandler", "OnError", 'dumpServer');



Пример сообщения оповещения об ошибке:
pismo.jpg

Где основной информацией является:
  • код ошибки
  • сообщения интерпретатора об ошибке
  • физический путь к файлу на сервере
  • номер строки в файле
Остальная отладочная информация указывается в настройках модуля.

От проявления подобных проблем на рабочем ресурсе никто не застрахован, чаще всего это происходит в процессе наращивания функционала рабочего сайта. Поэтому очень важно быть уверенным в корректной обработке и мгновенной реакции на возникшую ситуацию как заказчику, так и разработчику ответственному за проект.