set_error_handler - перехват всех ошибок

micolo

Новичок
set_error_handler - перехват всех ошибок

Доброго времени суток!

Хотелось бы услышать мнение экспертов по следующему вопросу. Я думаю многим разработчикам приходилось писать перехватчики ошибок php в собственных системах и я конечно тоже не исключение. Но использование стандартного класса Exception с прописыванием на каждом шагу блоков tru/catch - меня например напрягает. Т.е. я в принципе изначально знаю в каком месте моего кода может возникнуть исключительная ситуация - и прописываю что делать в этой ситуации. Гораздо важнее на мой взгляд чтобы перехватывать ошибки там где их не ожидаешь, ну мало ли что :). Так вот использование стандартной функции set_error_handler по перехвату ошибок мне "почти" хватает. Как заставить эту функцию перехватывать все без исключения ошибки. Почему то у меня ошибки типа Fatal error: Class not found - не перехватываются - выдается стандартная ошибка php. Это особенности "моего" программирования - или при таком использовании перехватить все ошибки невозможно?
 

Angerslave

Новичок
Error'ы и exception'ы это разные механизмы. Для error'ов - set_error_handler, для exception'ов - set_exception_handler. try..catch это для exception'ов, error'ы подавляются только знаком @ перед выражением. Чтобы перехватывать одной функцией и error'ы и exception'ы, надо сделать для неё функции-обёртки для set_error_handler и set_exception_handler.
 

fixxxer

К.О.
Партнер клуба
ну, то что предлагается на dklab с ob_, это какой то пипец.
display_errors на проде должен быть строго выключен. при фатал еррорах php отдает 50x код и страничцу типа "ой, у нас чото навернулось" можно спокойно подсунуть веб-сервером.
а catcheable ошибки спокойно можно обработать своим error handler-ом, в т.ч. и кинуть оттуда exception при желании.
 

dimagolov

Новичок
меня всегда радовали авторы, которые фаталы хотят обрабатывать пыхом. типа может ли доктор сделать лоботомию самому себе :)
 

Angerslave

Новичок
dimagolov
Ну, фатал еррор это не E_CORE_ERROR, почему бы и не обработать?
 

dimagolov

Новичок
чего-то решил, что shutdown ф-я отработается при фатале, что не верно в общем случае, но для PHP Fatal error: Maximum execution time верно.

про то, что E_ERROR словить нельзя через set_error_handler прямо написано в мане
 
Сверху