powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Обработка и логирование ошибок.
1 сообщений из 1, страница 1 из 1
(PHP) Обработка и логирование ошибок.
    #33417145
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо написать обработчик ошибок, который можно было бы вызывать как в объектно-ориентированных программах, так и в процедурных.

После долгого поиска и прочтения материалов по этому поводу вот что получилось ( ниже приведен упрощенный вариант ):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
<?php
// error.class.php

define('DEBUG',  1 );

define('LOG',  0 );

/**
 * Класс обработки и логирования ошибок.
 */

class Error {

    var $error_user_mess;
    
    var $error_debug_mess;
    
    var $error_log_mess;
    
    var $error_log_file = '/home/mysite/www/logs/my_error_log.log';
    
    /**
     * Конструктор
     */
    function Error($p_error_log='')
    {
        if (!empty($p_error_log) && file_exists($p_error_log))
        {
            $this->error_log_file = $p_error_log;
        }
    }
    
    /**
     * Error handler
     */
    function errorHandler($p_errno, $p_errstr, $p_errfile, $p_errline)
    {
        $this->error_user_mess  = 'Произошла ошибка во время выполнения. Данная страница временно недоступна.';
        
        $this->error_debug_mess = "[$p_errno] $p_errstr in file $p_errfile at line $p_errline";
        
        $this->error_log_mess   = '['.date('d.m.Y H:i:s', time()).'] '.$this->error_debug_mess."\n";
        
        // do something with error
        // ...
        
        if (DEBUG)
        {
            $this->displayDebugMessage();
        }
        else 
        {
            $this->displayUserMessage();
        }
        
        if (LOG)
        {
            error_log($this->error_log_mess,  3 , $this->error_log_file);
        }
    }
    
    /**
     * Выводит пользовательское сообщение об ошибке.
     */
    function displayUserMessage()
    {
        echo '<font color=red>'.$this->error_user_mess.'</font>';
        exit( 1 );
    }

    /**
     * Выводит отладочную информацию.
     */
    function displayDebugMessage()
    {
        echo '<div class=debug>'.$this->error_debug_mess.'</div>';
    }
}
?>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
// foo.php

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/error.class.php';

$err = new Error();

set_error_handler(array(&$err, 'errorHandler'));


class Foo {

    function raiseError()
    {
        trigger_error('Произошла ошибка!', E_USER_ERROR);
    }
}

$foo = new Foo();

// генерим ошибку в классе
$foo->raiseError();

// генерим ошибку вне класса
mysql_connect('localhost', 'user', 'invalid_pass');

echo '<br>Сообщение об ошибке, которое пойдет в лог:<br>';
echo $err->error_log_mess;
?>

Оправдано ли использование данного подхода к перехвату ошибок?
Можно ли что-то улучшить?
Ваши замечания?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Обработка и логирование ошибок.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]