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程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
ThinkPHP CURD方法之limit方法详解
Jun 18 PHP
php实现简单的上传进度条
Nov 17 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 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基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
简单实现php上传文件功能
2017/09/21 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
简单介绍Python中的JSON模块
2015/04/08 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
教育课题研究自我鉴定范文
2013/12/28 职场文书
工伤赔偿协议书
2014/04/15 职场文书
入职担保书怎么写
2014/05/12 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
证婚人致辞精选
2015/07/28 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书