PHP错误捕获
PHP错误类型说明
值 | 常量 | 说明 |
---|---|---|
1 | E_ERROR | 致命的运行时错误。这类错误一般是不可恢复的情况,例如内存分配导致的问题。后果是导致脚本终止不再继续运行。 |
2 | E_WARNING | 运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。 |
4 | E_PARSE | 编译时语法解析错误。解析错误仅仅由分析器产生。 |
8 | E_NOTICE | 运行时通知。表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。 |
16 | E_CORE_ERROR | 在PHP初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由PHP引擎核心产生的。 |
32 | E_CORE_WARNING | PHP初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由PHP引擎核心产生的。 |
64 | E_COMPILE_ERROR | 致命编译时错误。类似E_ERROR, 但是是由Zend脚本引擎产生的。 |
128 | E_COMPILE_WARNING | 编译时警告 (非致命错误)。类似 E_WARNING,但是是由Zend脚本引擎产生的。 |
256 | E_USER_ERROR | 用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 |
512 | E_USER_WARNING | 用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 |
1024 | E_USER_NOTICE | 用户产生的通知信息。类似 E_NOTICE, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 |
2048 | E_STRICT | 启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。 |
4096 | E_RECOVERABLE_ERROR | 可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个 E_ERROR 从而脚本会终止运行。 |
8192 | E_DEPRECATED | 运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。 |
16384 | E_USER_DEPRECATED | 用户产少的警告信息。 类似 E_DEPRECATED, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 |
30719 | E_ALL | E_STRICT出外的所有错误和警告信息。 |
开启错误提示
在php.ini中设置
error_reporting = E_ALL # 错误显示级别 display_errors = Off # 是否允许在PHP文件中显示错误 log_errors = On # 开启文件日志 error_log = "c:/wamp/logs/php_error.log" # 日志文件保存路径
通过php.ini文件设置了
display_errors = Off
后,无法在php文件中通过ini_set("display_errors", 1)
进行开启。 而且该设置将屏蔽编译、Zend脚本引擎、脚本运行时、以及通过E_USER..类的所有错误。在脚本文件中设置
ini_set("display_errors", 0)
前面说了,该开关仅在php.ini中设置了
display_errors = On
才有效,该配置只能控制脚本运行时以及、E_USER...类错误。 类似于E_PARSE
、E_CORE_ERROR
等编译与Zend脚本引擎,此方法无法控制。
终上所述,大体可以概括为错误提示来自于四个方面,分别为:PHP文件编译时、Zend脚本引擎、脚本运行时、用户自定义.
PHP文件编译与Zend脚本引擎产的错误只能通过php.ini中进行设置捕获。
错误捕获
- 脚本运行错误捕获除了可以通过
php.ini
设置日志文件进行捕获,还可以通过error_get_last
函数进行致命错误捕获.void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] ) function shutdown() { print_r(error_get_last()); } register_shutdown_function('shutdown');
register_shutdown_function
函数在程序执行退出时调用,我们可以在此调用error_get_last()
捕获致命错误;
error_get_last()
不能捕获PHP文件编译与Zend脚本引擎产的错误,如E_PARSE
、E_CORE_ERROR
;
error_get_last()
不受php.ini及php文件中的ini_set("display_errors", 0)
与error_reporting(0)
影响,只要是脚本执行错误无论错误提示是否打开,以及错误提示级别如何,它都能捕获错误。
- 在程序运行过程中,想触发一个自定义错误,当然使用普通的输入输出很容易办到,但是通过
set_error_handler
让错误变得更容易追踪。function exception_error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } set_error_handler("exception_error_handler"); $test=2; // 触发错误 if ($test>1) { trigger_error("A custom error has been triggered"); }