![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Главная | Учебник | Статьи | FAQ | Книги | Ссылки |
Ловля ошибок в PHP
Антон Довгаль
На серъезных сайтах странно видеть, когда ошибки выводятся пользователю в браузер в самых неожиданных местах. Почему они выводятся? Ведь текст ошибок является информацией для дебага и предназначена для разработчика, а не для клиента. Пишем программу, делающую лог ошибок и прячем их от пользователя.
На серъезных сайтах странно видеть, когда ошибки выводятся пользователю в браузер в самых неожиданных местах. Почему они появляются - это отдельный разговор. Но почему они выводятся ? Ведь текст ошибок является информацией для дебага и предназначена для разработчика, а не для клиента.
Кроме того, именно эта служебная информация обычно помогает злым хакерам ломать сайт. В качестве классического примера можно привести вариант с выводом запроса при ошибке: "you have an error in query near WHERE id= "... Большое спасибо. Подставляем после "WHERE id=..." строку "0 OR 1>0" и запрос выполняется по всей таблице. Если запрос на удаление, то...сами понимаете, весело =). Поэтому я всегда переменные в запросах заключаю в кавычки. На всякий случай...
Но я увлекся. Сегодня не об этом. Сегодня поговорим о том, как избежать вывода ошибок клиенту, сохранив при этом все сообщения вебмастеру на память.
Начнем, пожалуй, с краткого обзора видов ошибок в РНР.
Числовое значение | Константа | Описание | Ловится/нет |
1 | E_ERROR | Фатальные ошибки.Например, ошибка при обращении к памяти. Выполнение скрипта при этом прерывается. | нет |
2 | E_WARNING | Предупреждения (не фатальные ошибки). Выполнение скрипта не прерывается. | да |
4 | E_PARSE | Ошибки во время анализа синтаксиса. Генерируются парсером. | нет |
8 | E_NOTICE | Замечания (менее серьезные ошибки, чем предупреждения). Указывают на ситуацию, которая может стать причиной более серьезной ошибки, но могут случаться и в процессе нормальной работы скрипта. | да |
16 | E_CORE_ERROR | Ошибки во время загрузки РНР. Аналог E_ERROR, генерируется ядром РНР. | нет |
32 | E_CORE_WARNING | Предупреждения во время загрузки РНР Аналог E_WARNING, генерируется ядром РНР. | нет |
64 | E_COMPILE_ERROR | Фатальные ошибки во время компиляции кода. Аналог E_ERROR, генерируется зендовским движком. | нет |
128 | E_COMPILE_WARNING | Предупреждения во время компиляции кода. Аналог E_WARNING, генерируется зендовским движком. | нет |
256 | E_USER_ERROR | Пользовательская ошибка. | да |
512 | E_USER_WARNING | Пользовательское предупреждение. | да |
1024 | E_USER_NOTICE | Пользовательское замечание | да |