Оператор подавления @error и set_error_handler
Я следую хорошей практике программирования, и я регистрирую ошибки PHP в файле, а не отображая его пользователю. Для этого я использую set_error_handler()
.
Теперь проблема. Например, у меня есть где-то:
@file_exists('/some/file/that/is/outside/openbasedir.txt');
Но, несмотря на оператор подавления ошибок, журнал сообщений об ошибках. Я не хочу этого. Я хочу, чтобы подавленные ошибки не переходили к моему обработчику ошибок.
Ответы
Ответ 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);