首页 > 代码库 > PHP中的错误处理
PHP中的错误处理
程序只要在运行,就免不了会出现错误!或早或晚,只是时间问题罢了。
错误很常见,比如Notice,Warning等等。此时一般使用set_error_handler来处理:
<?phpset_error_handler(function($errno, $errstr, $errfile, $errline) { var_dump($errno, $errstr, $errfile, $errline);});// Notice: Use of undefined constant strlenstrlen;// Warning: strlen() expects exactly 1 parameter, 0 givenstrlen();?>
具体能做些什么呢?统一管理错误日志,或者呈现一个相对友好的错误提示页面等等。
但需要注意的是set_error_handler无法捕捉某些Fatal error,比如下面这个错误:
<?phpset_error_handler(function($errno, $errstr, $errfile, $errline) { var_dump($errno, $errstr, $errfile, $errline);});// Fatal error: Call to undefined function undefined_function()undefined_function();?>
不过我们真的就一点办法都没有了么?当然不是,我们不仅有办法,而且还有好几种:
第一种:ob_start + error_get_last
<?phpob_start(function($buffer) { if ($error = error_get_last()) { return var_export($error, true); } return $buffer;});// Fatal error: Call to undefined function undefined_function()undefined_function();?>
第二种:register_shutdown_function + error_get_last
<?phpregister_shutdown_function(function() { if ($error = error_get_last()) { var_dump($error); }});// Fatal error: Call to undefined function undefined_function()undefined_function();?>
此外,所有的Parse error(比如说少写了分号之类的错误)都无法捕捉,不过换个角度看,解析错误的代码本身就不应该发布,甚至都不应该进入版本库,关于这一点,我以前写过一篇《Subversion钩子》,里面介绍了如何利用Subversion钩子做代码语法检查。
转载自 http://huoding.com/2012/05/31/151
PHP中的错误处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。