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