powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php) При @-подавлении ошибок вызывается обработчик, установленный через set_error_handler
5 сообщений из 5, страница 1 из 1
(php) При @-подавлении ошибок вызывается обработчик, установленный через set_error_handler
    #38783398
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему при @-подавлении ошибок собственный обработчик, установленный через set_error_handler() , вызывается, а стандартный (если не устанавливать собственный) - нет ?
...
Рейтинг: 0 / 0
(php) При @-подавлении ошибок вызывается обработчик, установленный через set_error_handler
    #38783403
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
...
Рейтинг: 0 / 0
(php) При @-подавлении ошибок вызывается обработчик, установленный через set_error_handler
    #38807461
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то был уверен, что в справке об этом не написано.

авторЕсли вы установили собственную функцию обработки ошибок с помощью set_error_handler(), то она все равно будет вызвана, однако, если внутри этой функции будет вызвана функция error_reporting(), то она вернет 0, если функция, вызвавшая данную ошибку, была подавлена с помощью @ .
Значит, нужно в собственном обработчике добавить проверку на (error_reporting() !== 0) :
Код: php
1.
2.
3.
4.
5.
6.
function handler($errno, $errstr, $errfile, $errline, $errcontext) {
    if(error_reporting() !== 0) {
        // собственные действия
    }
    return ...
};

и реакция собственного обработчика на @-ошибки будет полностью идентична реакции стандартного обработчика.
...
Рейтинг: 0 / 0
(php) При @-подавлении ошибок вызывается обработчик, установленный через set_error_handler
    #38808733
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02Почему-то был уверен, что в справке об этом не написано.

авторЕсли вы установили собственную функцию обработки ошибок с помощью set_error_handler(), то она все равно будет вызвана, однако, если внутри этой функции будет вызвана функция error_reporting(), то она вернет 0, если функция, вызвавшая данную ошибку, была подавлена с помощью @ .
Значит, нужно в собственном обработчике добавить проверку на (error_reporting() !== 0) :
Код: php
1.
2.
3.
4.
5.
6.
function handler($errno, $errstr, $errfile, $errline, $errcontext) {
    if(error_reporting() !== 0) {
        // собственные действия
    }
    return ...
};

и реакция собственного обработчика на @-ошибки будет полностью идентична реакции стандартного обработчика.


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if(error_reporting()&$errno || self::is_flag(self::LOGGER_CATCH_ERROR_QUIET))
		{
			self::_write_error(array(
				'no'	=> $errno,
				'str'	=> $errstr,
				'file'	=> $errfile,
				'line'	=> $errline,
				//'context'=>$errcontext,
				'trace'	=> debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS),
			));
		}



держи коллега.

обясню

1) ОБРАБОТЧИК ОШИБОК ОБРАБАТЫВАЕТЬСЯ ВСЕГДА!!!!
error_reporting()&$errno
сравниваем текущий номер ошибки и настройки логирования

тоесть, если ошибка скажем 1 = 0х0000000000000001
а текущая настройка error_reporting() содержит еденицу в этом бите, значит логировать не надо. просто сравнивая еррор репортинг с нулём ...как бы бесмысленно.

self::is_flag(self::LOGGER_CATCH_ERROR_QUIET)
это уже настройка моего логера ...проверка включености флага логирования тихих ошибок.
тихой ошибкой называеться то, что либо через error_reporting отключено, либо через подавление ошибок.

поведение обработчика получается по фен-шую с родной логикой ошибок пхп.
...
Рейтинг: 0 / 0
(php) При @-подавлении ошибок вызывается обработчик, установленный через set_error_handler
    #38808736
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а простое сравнение с 0, как ты теперь вищишь...это пол результата. - притом что ты не отличишь одним сравнением - то ли собакой подавили ошибку, то ли включён error_reporting(0)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php) При @-подавлении ошибок вызывается обработчик, установленный через set_error_handler
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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