我使用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.
答案 0 :(得分:4)
当你尝试/ catch()一段代码时,你不会得到“未捕获异常”的致命错误。致命错误将导致脚本在错误点停止执行。既然你发现了异常,就按照你告诉它做的:回显字符串+错误信息,然后继续执行“Hello World!”。如果由于您的INI设置(例如堆栈跟踪打印输出),您的错误报告更加冗长。
答案 1 :(得分:3)
如果您不想禁用xdebug并且不希望显示跟踪消息,可以使用
关闭异常跟踪的显示。xdebug.show_exception_trace = 0
在你的php.ini
中答案 2 :(得分:1)
如果您不想显示错误,请关闭error_reporting和display_error。然后它将只显示异常打印出来的消息
答案 3 :(得分:0)
设置display_errors = off
会为您提供所需的行为,但请注意,您不会收到任何错误消息或警告,因此除非您处于生产环境中,否则强烈建议您留下这个。
如果您不想关闭所有php的错误报告,可以执行以下操作之一:
<?php ini_set('display_errors', 0); ?>
。php_flag display_errors "1"
希望这会有所帮助