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集成FCK的函数代码
Sep 27 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
选择PHP作为网站开发语言的原因分享
Jan 03 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
如何用php获取文件名后缀
Jun 09 PHP
php判断ip黑名单程序代码实例
Feb 24 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
PHP开发框架laravel安装与配置教程
Mar 13 PHP
PHP编程入门的基本语法知识点总结
Jan 26 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 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模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
python使用循环实现批量创建文件夹示例
2014/03/25 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
python中update的基本使用方法详解
2019/07/17 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
建筑工程管理专业自荐信范文
2013/12/28 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
工伤死亡理赔协议书
2014/10/20 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
Django分页器的用法你都了解吗
2021/05/26 Python