Опросец

Добавляете ли Вы свой блог в рейтинги?

View Results

Loading ... Loading ...

Реклама на сайте

Баннеры

Участник Blograte.ru Участник планеты Developers.org.ua
Форум блоггеров
Каталог "Тематических Блогов Рунета"

Как сделать свой обработчик ошибок 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, то можно получить номер ошибки.

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

[Post to Twitter] Не жадничай, твитни пост, поделись с друзьями 

Похожие записи

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

  • А лог файлы не спасают?

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

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

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

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

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