Подтвердить что ты не робот

Оператор подавления @error и set_error_handler

Я следую хорошей практике программирования, и я регистрирую ошибки PHP в файле, а не отображая его пользователю. Для этого я использую set_error_handler().

Теперь проблема. Например, у меня есть где-то:

@file_exists('/some/file/that/is/outside/openbasedir.txt');

Но, несмотря на оператор подавления ошибок, журнал сообщений об ошибках. Я не хочу этого. Я хочу, чтобы подавленные ошибки не переходили к моему обработчику ошибок.

4b9b3361

Ответ 1

Оператор @ временно устанавливает error_reporting в 0, поэтому вы можете проверить значение error_reporting в обработчике ошибок:

if (ini_get('error_reporting') == 0) {
    return;
}

Или даже лучше, регистрируйте только типы ошибок, которые находятся в error_reporting:

$error_reporting = ini_get('error_reporting');

if ( !($error_reporting & $errno) ) {
    return;
}

Также ознакомьтесь с параметрами log_errors и error_log, чтобы автоматически регистрировать ошибки к файлу или к syslog.

Ответ 2

На самом деле вам следует избегать использования оператора @. Прежде всего, он медленный, и я бы назвал его вредным.

Вместо этого вы должны иметь в файле php.ini две строки:

error_repoting = E_ALL | E_STRICT
display_errors = Off

... или, если у вас нет доступа к файлу php.ini, то в верхней части index.php(или любого другого файла начальной загрузки) вы должны добавить:

error_reporting( E_ALL | E_STRICT );
ini_set('display_errors', 0);