Обработка ошибок в PHP
Выпуская сайт в Интернет, 99.9% того, что там содержится масса ошибок, причём именно масса. Вроде Вы всё проверили, вроде всё протестировали, однако, ошибки всё равно не избежны, и очень важно получать о них своевременную информацию. И вот об обработке ошибок в PHP мы и поговорим в этой статье.
Значит, наша с Вами задача получать каким-то образом уведомления о возникающих проблемах. Давайте разберём такой простой код:
<?php
/* Функция по обработке ошибок */
function handlerErrors($code, $msg, $file, $line) {
mail("[email protected]", "Произошла ошибка", "$msg ($code) в файле $file (строка $line)"); // Отправляем e-mail администратору о возникновении ошибки
/* Здесь можно сделать редирект на страницу с информацией о том, "что ошибка получена, и скоро она будет исправлена" (так поступает множество серьёзных сервисов, по типу mail.ru и прочих) */
}
set_error_handler(handlerErrors); // Устанавливаем наш обработчик ошибок
$mysqli = new mysqli("localhost", "root", "", "mydb"); // Пытаемся подключиться к базе данных
if (!$mysqli) {
/* Если подключение не удалось, то вызываем ошибку */
trigger_error("No connect");
}
?>
В результате, Вы можете получить на свой e-mail, например, следующее: "mysqli::mysqli() [<a href='mysqli.mysqli'>mysqli.mysqli</a>]: (28000/1045): Access denied for user 'root'@'localhost' (using password: YES) (2) в файле Z:\home\test.local\www\index.php (строка 8)".
При этом пользователь никаких ошибок не увидит, если Вы этого, конечно, не захотите, а Вы, в свою очередь, получите письмо и сможете принять меры по устранению ошибки. Так же обратите внимание, что данная ошибка будет размещена в log-файле, поэтому, в целом, письмо отправлять и необязательно, достаточно регулярно просматривать log с ошибками.
А на этапе создания сайта Вам нужно как можно больше найти "опасных" мест, где могут возникнуть ошибки и поставить там проверку и вызов trigger_error() в случае её возникновения.
-
- Михаил Русаков
Комментарии (6):
Отличная статья, спасибо!
Ответить
Согласен, было-бы круто увидеть рабочий класс ооп для обработки ошибок в крупных приложениях, полезная штука эта обработка...
Ответить
вот я встроил этот код и посыпались ошибки на е-майл.хотя все и работает,правда регистрация на телефон не приходит.вот вопрос,как их исправлять ?В основном на сессии $_SESSION ,воощето только на них Undefined index: error_login (8)
Ответить
Данное замечание означает, что Вы обращаетесь к индексу в сессии, который не существует. Прежде чем обращаться, нужно проверить его на существование с помощью isset().
Ответить
с этим кодом я наверное неправильно проверяю,как с ним проверять?яж его в functions.php разместил как нуб.его наверно просто запускать надо?
Ответить
Данный код без вызовов будет присылать только синтаксические ошибки, которые PHP будет сам указывать. А чтобы он присылал те ошибки, которые PHP сам не напишет, вот тогда нужно и вызывать через trigger_error.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.