Обнаружено исключение PHP, но сообщение об ошибке все еще появляется - PullRequest
4 голосов
/ 12 января 2012

Я использую некоторый код из руководства по PHP для выполнения теста исключений, но получаю странное сообщение.

Вот код:

function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');
    }
    else return 1 / $x;
}

try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

// Continue execution
echo 'Hello World';

А вот и онвывод:

0.2
( ! ) Exception: Division by zero. in /var/www/OOPlearing/slash.php on line 10Call Stack#TimeMemoryFunctionLocation10.0002330188{main}(  )../slash.php:020.0002330232inverse( $x = 0 )../slash.php:17Dump $_SERVER$_SERVER['HTTP_HOST'] =string 'localhost' (length=9)$_SERVER['SERVER_NAME'] =string 'localhost' (length=9)Dump $_GETVariables in local scope (#2)$x =int 0
Caught exception: Division by zero.Hello World

Странно, что, хотя исключение было обнаружено, сообщение об исключении все еще включено ...

Некоторые из моих локальных настроек в php.ini:

error_reporting = E_ALL & ~E_DEPRECATED
display_errors =On
display_startup_errors = Off
log_errors = Off
......
html_errors = On

Моя записная книжка:

ubuntu11.04
mysql  Ver 14.14 Distrib 5.1.54
PHP 5.3.5-1

Обновление (2012.1.16) Это расширение xdebug, которое привело к таким ошибкам.По умолчанию xdebug показывает трассировку стека в условиях ошибки.Для тех, кто хочет отключить его, можете сделать ниже инструкции:

xdebug_disable();//put it on the header of your code,like cofig file.

подробнее

Ответы [ 4 ]

4 голосов
/ 12 января 2012

Когда вы пытаетесь / перехватить () блок кода, вы не получите фатальную ошибку «Uncaught exception».Неустранимая ошибка приведет к тому, что скрипт перестанет выполняться в точке ошибки.Поскольку вы поймали исключение, он выполнил то, что сказал: «Строка + сообщение об ошибке», затем он продолжил выполнение «Hello World!»Во всяком случае, ваши сообщения об ошибках более подробны из-за настроек INI, например распечатка трассировки стека.

3 голосов
/ 04 ноября 2012

Если вы не хотите отключать xdebug и не хотите, чтобы появилось сообщение трассировки, вы можете отключить отображение трассировки исключений с помощью

xdebug.show_exception_trace = 0

в вашем php.ini

1 голос
/ 12 января 2012

Если вы не хотите, чтобы ошибки отображались, отключите error_reporting и display_error.Затем будет показано только сообщение о том, что исключение распечатывается

0 голосов
/ 13 января 2012

Настройка display_errors = off даст вам желаемое поведение, но имейте в виду, что вы не получите ЛЮБЫХ сообщений об ошибках или предупреждений, поэтому, если вы не находитесь в производственной среде, настоятельно рекомендуется оставить это включенным.

Если вы не хотите отключать отчеты об ошибках для всех php, вы можете сделать одно из следующих действий:

  • установить <?php ini_set('display_errors', 0); ?> в верхней части вашего скрипта.
  • создайте виртуальный хост для вашего сайта (если у вас его еще нет) и создайте .htaccess и включите в него строку php_flag display_errors "1"

надеюсь, это поможет

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