发表时间:2014-09-05来源:网络
程序只要在运行,就免不了会出现错误!或早或晚,只是时间问题罢了。
错误很常见,比如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仿博客园,个人博客(1)
下一篇:PHP数据流应用的一个简单例子
CI框架连接数据库配置操作以及多数据库操作
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
C语言关键字及其解释介绍 C语言32个关键字详解
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
将视频设置为Android手机开机动画的教程
PHP中的(++i)前缀自增 和 (i++)后缀自增
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
常用dos命令及语法
PHP中include和require区别之我见
桩桩充电官方版下载v2.4.2 安卓版
80.31MB |生活服务
中国天气通专业版最新版下载v9.1.0.4 官方安卓版
56.95MB |系统工具
新疆联通网上营业厅官方版(又名中国联通)下载v12.8 安卓客户端
118.17MB |生活服务
联通手机营业厅关怀版(又名中国联通)下载v12.8 安卓最新版
118.17MB |生活服务
28hse香港租屋网APP下载v3.14.0 手机版
51.07MB |生活服务
唐山联通掌上营业厅(中国联通)下载v12.8 安卓版
118.17MB |生活服务
新货多app下载v2.6.2 安卓最新版
65.91MB |生活服务
东梨短剧免费正版app下载v4.0.3 安卓版
61MB |影音播放
2014-09-05
2022-03-20
2022-03-21
2022-03-24
2014-09-05
2014-09-05
2015-07-05
2014-09-05
2014-09-05
2022-03-21