Как мне управлять ошибками с помощью строгой отчетности в PHP? - PullRequest
0 голосов
/ 20 апреля 2011

Я использую собственный обработчик ошибок с полным отчетом об ошибках в PHP для отслеживания ошибок. Это прекрасно работает для отладки и регистрирует все мои ошибки в базе данных для дальнейшего расследования.

В любом случае, этот метод теперь отключает использование @ для игнорирования ошибки при ее возникновении. Теперь у меня есть проблема, когда я пытаюсь переименовать каталог в моей системе, потому что он может иногда выдавать ошибку (если к нему обращаются к файлам).

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

Есть ли простое решение для этого? Я пытаюсь использовать try / catch , но все равно появляется ошибка.

Ответы [ 2 ]

1 голос
/ 23 апреля 2011
Решение

@ zerkms будет работать нормально, но мой обработчик ошибок уже завершен, поэтому, чтобы расширить его, чтобы дать мне функциональность, я просто включил:

if ( error_reporting() == 0 )
  return;

в начале моего обработчика.Таким образом, если @ используется для функции, ошибка все еще генерируется, но игнорируется в начале обработчика (следовательно, не вошел в базу данных и т. Д.), И я все равно получу логический результат от функции, например, rename().

Это также позволило мне при необходимости использовать решение try / catch для кода.

1 голос
/ 20 апреля 2011

Вы можете преобразовать все ошибки / предупреждения / уведомления в исключения

function exceptions_error_handler($severity, $message, $filename, $lineno) {
  if (error_reporting() == 0) {
    return;
  }
  if (error_reporting() & $severity) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
  }
}
set_error_handler('exceptions_error_handler');

Я думаю, что лучше обрабатывать исключения, чем собственные ошибки php.

...