#php #exception
#php #исключение
Вопрос:
На моей машине для разработки у меня установлено значение error_reporting E_ALL | E_STRICT
, чтобы видеть все сообщения об ошибках, которые возникают в моем коде. Но когда я имею дело с перехваченными исключениями, такими как:
try {
throw new MyException('Exception message.');
} catch (MyException $e) {
// code that handles the exception but without print anything
}
PHP всегда показывает сообщение об ошибке:
MyException: Exception message in file://path/to/failed/file.php
и после этого PHP не может отправлять новые заголовки.
Знаете ли вы какой-нибудь способ избежать автоматически генерируемых ошибок PHP, которые будут отображаться вызванными, но перехваченными исключениями с display_errors=On
помощью и error_reporting=E_ALL |E_STRICT
?
Ответ №1:
Вы можете установить пользовательский обработчик ошибок и записать эти ошибки в файл или что-то вроде этого. Информацию об этом можно найти здесь: http://php.net/manual/en/function.set-error-handler.php
Ответ №2:
Если вы напечатаете сообщение, заголовки будут отправлены, точка. Если вам не нужно его печатать, не делайте этого. Вместо этого вы могли бы записать это в журнал.
Комментарии:
1. Я не печатаю сообщение, это обработчик ошибок PHP, который печатает сообщение. Я хочу избежать этого.
2. Из вашего вопроса:
echo $e->getMessages();
. Я что-то недопонимаю?3. Код: try { throw new MyException(‘Сообщение об исключении.’); } catch (MyException $ e) { // php-код, который обрабатывает эту ошибку, но ничего не печатает }
Ответ №3:
Хорошо, это была моя ошибка.
Если у вас установлен xdebug и если ваша конфигурация xdebug имеет xdebug.show_exception_trace = 1
в любом случае возникает исключение, xdebug сбрасывает трассировку стека.