PHP中使用register_shutdown_function函数截获fatal error示例


Posted in PHP onApril 21, 2015

我们在做项目时,偶尔会因为不谨慎而出现fatal error。如果display_errors设置成off,那用户将会看到的是一个空白的页面。若设置成了on,那fatal error的信息将会呈现出来(当然正常的人都不会这样干)。

那我们有什么方法可以提前截获到fatal error,并用我们自己自定义的友好形式反馈给用户呢。PHP中有一个叫做  register_shutdown_function 的函数,可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,这个函数将会被调用。
下面请看一个例子:

<?php

$flag = false;

function deal_error(){

    global $flag;

    if (!$flag){

        die("粗问题啦,请稍后再试");

    }

    return false;

}

register_shutdown_function("deal_error");

//将因为致命错误而失败

//$obj = new NotExistClass(); //引入未定义的类

require('./test.php');

$flag = true;

我们在程序入口处,设置flag为false,最后设置成true,表明程序正常执行。若flag最后不为true,说明在中间某个地方死掉了,此时就会调用register_shutdown_function,输出我们自定义的错误结果。

如上面的类未定义、引入不存在的文件(必须使用require或require_once)等会导致fatal error。当然,要是你程序是缺个标点或者多了个特殊字符啥的,那就没办法了。

PHP 相关文章推荐
php采集时被封ip的解决方法
Aug 29 PHP
浅析PHP Socket技术
Aug 02 PHP
PHP函数getenv简介和使用实例
May 12 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
PHP微信分享开发详解
Jan 14 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 #PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 #PHP
PHP使用递归生成文章树
Apr 21 #PHP
php实现的美国50个州选择列表实例
Apr 20 #PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 #PHP
php中使用base HTTP验证的方法
Apr 20 #PHP
PHP加密解密类实例分析
Apr 20 #PHP
You might like
php字符串的替换,分割和连接方法
2016/05/23 PHP
自动更新作用
2006/10/08 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
Django设置Postgresql的操作
2020/05/14 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
应届大学生自荐信
2013/12/05 职场文书
消防器材管理制度
2014/01/28 职场文书
外国人聘用意向书
2014/04/01 职场文书
美食节目策划方案
2014/05/31 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
css3 文字断裂效果
2022/04/22 HTML / CSS
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers