set_error_handler & set_exception_handler - PullRequest
0 голосов
/ 15 января 2011

Я использую следующие функции для настройки контроля ошибок:

set_error_handler
set_exception_handler

При возникновении ошибки она вызывает эту функцию, которая фиксирует ошибки и сохраняет их в базе данных, прежде чем перенаправить пользователя на общую страницу

function log_error($exception)
 {
  if(is_object($exception))
   log_action(ERROR, "Exception with message " . $exception->getMessage() . " thrown in " . $exception->getFile() . " on line " . $exception->getLine(), base_url() . $_SERVER["REQUEST_URI"]);
  else
   log_action(ERROR, "Unable to catch exception. print out: " . print_r($exception, true), base_url() . $_SERVER["REQUEST_URI"]);

  header("Location: " . base_url() . "public_error_notification");
 }

Обычно это работает, за исключением того, что много раз вместо получения объекта ошибки, я просто получаю число. Два числа, которые я получаю все время - это 8 и 2. Вы можете видеть, что я учел эти числа в моем журнале ошибок. У меня вопрос, что означают эти цифры? Когда я посмотрел его, это имело смысл, потому что были коды ошибок для файлов, но ошибки, которые я получаю сейчас, не имеют ничего общего с файлами. Я предполагаю, что это код ошибки, так есть ли способ получить список кодов ошибок, которые могут быть возвращены?

Ответы [ 3 ]

2 голосов
/ 15 января 2011

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

Посмотрите на документ set_error_handler, первый аргумент - ошибкакод, секунда - строка ошибки.Объект не передан

http://php.net/set_error_handler

Для кодов ошибок установите следующее:

http://php.net/manual/en/errorfunc.constants.php

2 голосов
/ 15 января 2011

Обратный вызов error_handler принимает функцию с такой подписью:

handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )

Первый аргумент - номер ошибки, второй - строка, описывающая ошибку.

Между тем, exception_handler имеет функцию с такой подписью:

handler ( object $exception )

Где первый и единственный аргумент - это объект, содержащий сведения о сгенерированном исключении.

Проблема в том, что исключения и ошибки не имеют одинаковую сигнатуру обратного вызова. В то время как вы имеете дело с исключениями, вы используете неподходящий обратный вызов для обработки ошибок.

Когда вы видите такие числа, как 8 и 2, вы ловите ошибки, когда вы видите объект исключения, вы ловите исключения.

1 голос
/ 15 января 2011

Я просто добавлю, что число, которое вы получаете, является уровнем возникшей ошибки, для них в php определены константы, такие как E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...