> php教程 > php手册 > 본문

PHP中的错误处理

WBOY
풀어 주다: 2016-06-06 20:07:31
원래의
1292명이 탐색했습니다.

程序只要在运行,就免不了会出现错误!或早或晚,只是时间问题罢了。 错误很常见,比如Notice,Warning等等。此时一般使用set_error_handler来处理: ?phpset_error_handler(function($errno, $errstr, $errfile, $errline) { var_dump($errno, $errstr, $er

程序只要在运行,就免不了会出现错误!或早或晚,只是时间问题罢了。

错误很常见,比如Notice,Warning等等。此时一般使用set_error_handler来处理:

<?php set_error_handler(function($errno, $errstr, $errfile, $errline) {
    var_dump($errno, $errstr, $errfile, $errline);
});
// Notice: Use of undefined constant strlen
strlen;
// Warning: strlen() expects exactly 1 parameter, 0 given
strlen();
?>
로그인 후 복사

具体能做些什么呢?统一管理错误日志,或者呈现一个相对友好的错误提示页面等等。

但需要注意的是set_error_handler无法捕捉某些Fatal error,比如下面这个错误:

<?php set_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

<?php ob_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

<?php register_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钩子做代码语法检查。

似乎应该顺水推舟接着写点介绍异常的文字才好,可惜时间不早了,还是洗洗睡吧。

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿