PHP中的错误处理和日志函数
debug_backtrace — 返回一个供调试使用的信息树
debug_print_backtrace — 打印一个供调试使用的信息树
error_get_last — 捕获最后的一条错误信息
error_log — 将php的错误信息发送到某处
error_reporting — 设定php的错误显示状况
restore_error_handler — 恢复set_error_handler()函数对错误处理方式的修改
restore_exception_handler — 恢复set_exception_handler()函数对异常处理方式的修改
set_error_handler — 指定一个自定义的函数来处理错误信息
set_exception_handler — 指定一个自定义的函数来处理异常信息
trigger_error — 抛出一条用户级的错误信息。
user_error — trigger_error()函数的别名
php中的错误有以下几种类型:
E_ERROR:php运行中的致命错误,会终止程序的运行。
E_WARNING:php运行中的非致命错误,不会终止程序的运行。
E_NOTICE:php运行中的重要建议,最好有所改进的地方。
E_STRICT:php运行中的细节建议,往往是为了更好的向后兼容。
E_PARSE:编译过程中解析器汇报的错误,比如你忘记了语句后面的“;”。
E_CORE_ERROR:php核心产生的致命错误。
E_CORE_WARNING:php核心产生的非致命错误。
E_COMPILE_ERROR:Zend引擎引起的编译致命错误。
E_COMPILE_WARNING:Zend引擎引起的编译非致命错误。
E_USER_ERROR:使用trigger_error()函数抛出的致命错误,会终止程序的运行。
E_USER_WARNING:使用trigger_error()函数抛出的非致命错误,不会终止程序的运行。
E_USER_NOTICE:使用trigger_error()函数抛出的并不严重的错误。
E_RECOVERABLE_ERROR:Catchable fatal error. It indicates that a probably dangerous error occured, but did not leave the Engine in an unstable state. If the error is not caught by a user defined handle (see also set_error_handler()), the application aborts as it was an E_ERROR.
E_ALL:在PHP 5.2之前表示除了E_STRICT之外的所有错误。6以后表示所有错误。
error_reporting()函数的作用是设定错误的显示方式,唯一的一个参数必须是一个数字,“0”表示不显示任何错误。
1E_ERROR
2E_WARNING
4E_PARSE
8E_NOTICE
16E_CORE_ERROR
32E_CORE_WARNING
64E_COMPILE_ERROR
128E_COMPILE_WARNING
256E_USER_ERROR
512E_USER_WARNING
1024E_USER_NOTICE
6143E_ALL
2048E_STRICT
4096E_RECOVERABLE_ERROR
error_reporting(0);
// 不显示任何错误信息
error_reporting(E_ALL ^ E_NOTICE);
// E_ALL 的二进制为:1011111111111,E_NOTICE 的二进制为:1000,两者进行按位异或操作,得到:1011111110111 表示在E_ALL级别中排除E_NOTICE的错误信息,并显示。
?>
error_get_last()函数的作用是捕获最后一条错误信息。
echo3/0;
print_r(error_get_last());
/**
* Array
* (
* [type] => 2
* [message] => Division by zero
* [file] => D:\work\web\php\test.php
* [line] => 2
* )
*/
echo$a;
print_r(error_get_last());
/**
* Array
* (
* [type] => 8
* [message] => Undefined variable: a
* [file] => D:\work\web\php\test.php
* [line] => 14
* )
*/
?>
trigger_error()函数的作用是抛出一条用户级的错误信息。trigger_error()函数有两个参数,第一个参数表示抛出的信息 内容,第二个参数是E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE 之一,表示错误信息的级别。
trigger_error("这里显示一个错误", E_USER_WARNING);
// 显示 “Warning: 这里显示一个错误 in D:\work\web\php\test.php on line 2”
?>
debug_backtrace()函数的作用是返回一个供调试使用的信息树。debug_print_backtrace()函数的作用是直接打印输出信息,而不是返回。
functiontest($arg)
{
print_r(debug_backtrace());
}
test(6);
/**
* Array
* (
* [0] => Array
* (
* [file] => D:\work\web\php\test.php
* [line] => 7
* [function] => test
* [args] => Array
* (
* [0] => 6
* )
*
* )
*
* )
*
*/
?>
error_log()函数的作用是将php的错误信息发送到某处,error_log()函数有四个参数,第一个参数表示错误的信息,第二个参数 表示发送错误的方式:0表示本地系统的php的错误日志,1表示发送到某个邮箱地址,2表示发送到远程的服务器(仅在php3中有效),3表示追加到任意 的一个本地文件。
error_log("错误信息", 3, "./test.txt");
// 在当前目录生成一个test.txt文件,并存放错误信息
?>
set_error_handler()函数的作用是设定一个回调函数来处理错误信息。set_error_handler()函数有两个参数,第 一个参数是回调函数的名称,第二个参数表示错误的级别。restore_error_handler()函数的作用是恢复先前 set_error_handler()函数定义前的错误处理方式。set_exception_handler()函数的作用是设定一个处理异常的函 数,一种自定义的异常处理方式。restore_exception_handler()函数的作用是恢复 set_exception_handler()函数对异常处理方式的修改。
set_error_handler()函数指定的函数需要处理五个参数:分别表示:错误级别,错误信息,错误的文件,错误的行数,错误处的变量信息,其中最后一个参数是可选的。
set_exception_handler()函数指定的函数需要一个参数:包含错误信息的对象。