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程序
Feb 04 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
php ios推送(代码)
Jul 01 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
laravel中的错误与日志用法详解
Jul 26 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 PHP
如何通过PHP实现Des加密算法代码实例
May 09 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 表单验证实现代码
2009/03/10 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
python二分查找算法的递归实现方法
2016/05/12 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
python getopt模块使用实例解析
2019/12/18 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
建筑安全标语
2014/06/07 职场文书
优秀班主任材料
2014/12/16 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
建国大业电影观后感
2015/06/01 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis