Как сделать свой обработчик ошибок php скрипта

Программа, какой бы совершенной он не было, но может дать сбой. То же самое касается и сайтов — может случится всякие: хостер поставил новое ПО, следующая версия php не поддерживает ваших конструкция и все время валяться варнинга и ошибки. Последнее стало особенно актуально с выходом версии php 5.3, когда используемая многими функция eregi выпала в deprecated. Со сменой ПО у меня совсем недавно был курьез на самом любимом моем проекте — хостер поменял настройки СУБД и таблицы innoDB отвалились, а форум, который на myISAM продолжал работать, то хостер клялся могилой отца, что ничего не меняли как-то выглядело неубедительно. Скрипт я поправил, а осадок остался — вывод ошибок был отключен через директивы .ini файла и пользователь просто видел белую страницу. Естественно доверия такие выходки сайту не добавляют, но и сухой вывод ошибок меня тоже не устраивает, вот и пришлось внести несколько дополнений на сайт.

Для начала вызываем такую конструкцию:

set_error_handler('on_php_error');

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

function on_php_error($errno, $errstr, $errfile, $errline)
{
    switch ($errno) {
    case E_USER_ERROR:
        echo "<b>Извините, на сайте произошла ошибка - торжественно клянемся поправить её в ближайшее время</b>";
		//тут лучше сформировать пиьсмо и отправить администратору сайты
        exit(1);
        break;

    case E_USER_WARNING:
        //обрабатываем варнинги
        break;

    case E_USER_NOTICE:
        //обрабатываем нотисы
        break;

    default:
        //обрабатываем остальные сообщения о неполадках
        break;
    }

    return true;
}

Как видно из названий переменных можно извлечь следующую информацию об ошибке:

$errstr — сообщение об ошибке в стиле php
$errfile — файл, в котором была вызвана ошибка
$errline — номер строки с ошибкой.

Думаю содержание этих переменных и стоит отсылать администратору сайта. Плюс ко всему, если сделать echo $errno, то можно получить номер ошибки.

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

Как сделать свой обработчик ошибок php скрипта: 6 комментариев

    • здесь упор я бы сделал не на то чтобы сообщить кому нужно об ошибке, я сам всегда логи смотрю, а в том, чтобы пользователю вывалиась на белая страница или пхпешное сообщение об ошибке, а нормальная страница: ведь никто не мешает украсить её на свой вкус

  1. Здравствуйте, а напишите поподробнее. Если применять обработчик ошибок к WordPress, то set_error_handler(‘on_php_error’); в какое место вставлять и в каком виде? И есть ли какие-то особенности, относительно примениения обработчика именно в WordPress?

    • думаю проблем не возникнет, а сделать это лучше в файле wp-config.php например, ведь именно он подключается во всех остальных файлах. Там же и саму функцию описать

  2. И еще из статьи непонятно, каким образом автор-разработчик будет узнавать об ошибках. В какой файл они выводятся?

    • Уже в самой функции вы можете организовать опопвещение, высылать email или записывать в базу, например, в удобном вам формате, а не в том, что предлагают логи апача, хотя они тоже бесспорно информативны

Обсуждение закрыто.