Сообщения об исключениях и уже отправленные заголовки ошибка при разработке

#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 сбрасывает трассировку стека.