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防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
php中数字0和空值的区别分析
Jun 05 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
php PDO异常处理详解
Nov 20 PHP
浅谈PHP中new self()和new static()的区别
Aug 11 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
详细解读php的命名空间(一)
Feb 21 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
PHP实现的多进程控制demo示例
Jul 22 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 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
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
js验证表单第二部分
2006/11/25 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
Python常见数据结构详解
2014/07/24 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
Python探索之创建二叉树
2017/10/25 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
python中有函数重载吗
2020/05/28 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
pycharm永久激活超详细教程
2020/10/29 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
《哪吒闹海》教学反思
2014/02/28 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
2016特色励志班级口号
2015/12/24 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
总结Python使用过程中的bug
2021/06/18 Python
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android
浅谈克隆 JavaScript
2021/11/02 Javascript
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis