@ оператор подавления ошибок и set_error_handler

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

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

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

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

Solutions Collecting From Web of "@ оператор подавления ошибок и set_error_handler"

Оператор @ временно устанавливает 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 параметрами log_errors и error_log , чтобы автоматически регистрировать ошибки в файле или в syslog.

Вы фактически должны избегать использования оператора @ . Прежде всего, это медленно, и я бы назвал это вредным.

Вместо этого вы должны иметь в файле 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);