如何处理PHP的E_ERROR或Fatal Error是一件麻烦事。当程序因为内存不足、执行超时等等而出现致命错误意外中断时,也需要进行相关的处理,而这时error_reporting与try...catch都不适用。
这时可以利用PHP的register_shutdown_function函数。
手册上写的很明确:register_shutdown_function — Register a function for execution on shutdown,就是说当程序中断时会调用该函数注册的函数。
比如:
<?php
function shutdown() {
echo 'Script executed with success', PHP_EOL;
}
register_shutdown_function('shutdown');
?>
当然,任何的程序中断都会触发用此方法注册的函数,包括exit()等等。如果想只用来处理某段程序的致命错误,这时需要进行一下判断,可以参考一下代码:
<?php
class Test {
private $running;
public function __construct() {
register_shutdown_function(array($this, 'shutdown_handler'));
}
public function main() {
$this->running = true; //开始监测
echo "Hello ";
$this->error(); //(undefined method)触发一个致命错误
echo "World ";
$this->running = false; //结束监测
}
public function shutdown_handler() {
if ($this->running) {
echo '抱歉出错了~';
@header("Location: error.php");
}
}
}
$t = new Test();
$t->main();
?>
更新:其实这里可以使用error_get_last()函数来获取最后一条错误
<?php
public function shutdown_handler() {
$error = error_get_last();
if ($error['type'] == 1) { //只针对E_ERROR
echo '抱歉出错了~';
@header("Location: error.php");
}
}
分享到:
相关推荐
1、错误类型:PHP致命错误 Error type: PHP Fatal error Fatal error: Cannot redeclare (a) (previously declared in (b)) in (c) on line (d) 2、错误描述: 该错误报告表示你正企图对已经定义过的函数进行再次定义...
本文实例讲述了ThinkPHP提示错误Fatal error: Allowed memory size的解决方法。分享给大家供大家参考。具体分析如下: 如果你的ThinkPHP提示你:致命错误(Fatal error: Allowed memory size),根据网上说的提高...
ZipArchive是php自带的一个压缩与解压缩函数了,今天理所当然的情况中使用new ZipArchive来创建zip文件时碰到提示Fatal error: Class ZipArchive not found in错误,感兴趣的朋友就一起来看看解决方法。 测试代码...
Fatal error: Call to undefined function curl_init()解决方法
最近一个项目需要读写excel,但是Qt自带的读写方法效率低,经过查询发现可以使用Qxlsx ,是一个非常好的开源软件库。 这是QT里面Qxsl库安装包,其他的配置自行百度安装。需要提前安装per。
fate的error信息,用来描述手机在某时间段的操作
Fatal error: Cannot redeclare htmtocode() (previously declared in D:\www_local\mytest\conn.php:7) in D:\www_local\mytest\conn.php on line 10 这个错误提示出现在写分页文件page.php时 google翻译这句话的...
主要介绍了PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法,需要的朋友可以参考下
PHP的错误机制也是非常复杂的,做了几年php,也没有仔细总结过,现在就...这种错误是致命错误,会在页面显示Fatal Error, 当出现这种错误的时候,程序就无法继续执行下去了 错误示例: // Fatal error: Call to un
PHP7错误处理 ... 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。 Error 类并非继承自 Exception 类,所以不能用 catch (Exception e)…来捕获Error。你可
nginx-upload-module模块源码,用于nginx配置文件上传功能
webforge-致命错误处理程序 一个非常简单的类,可以通过邮件报告严重错误 安装 使用进行安装。 composer require -v --prefer-source webforge/fatal-error-handler @stable 用法 // do vendor autoload $ handler ...
linux下sdl库文件和头文件-------------------------------
系统 BIOS 已报告组件的 PCIe 致命错误,该组件所在的 PCI 配置空间位于总线 ##,设备 ##,功能 ##。 系统 BIOS 已报告组件的 PCIe 致命错误,该组件位于插槽 #。 卸下并重置 PCI 扩充卡。如果问题仍然存在,请...
需要注意的是上文提到的严格模式的问题在这里同样适用:强制模式(默认,既强制类型转换)下还是会对不符合预期的参数进行强制类型转换,严格模式下则触发 TypeError 的致命错误。 4. use 批量声明 PHP 7 中 use ...
附加的 mex_improved.pl 文件修复了 MATLAB /bin 文件夹中 mex.pl 文件中的一个... 这允许在 Windows 下编译包含许多库文件的大型 c 代码,并防止“致命错误 LNK1170:命令文件中的行包含 131071 个或更多字符”错误。
E171F PCIE Fatal Err B## D## F## PCIE Fatal Err Slot # 系统 BIOS 已报告组件的 PCIe 致命错误,该组件所在的 PCI 配置空间位于总线 ##,设备 ##,功能 ##。 系统 BIOS 已报告组件的 PCIe 致命错误,该组件位于...
E171F PCIE Fatal Err B## D## F## PCIE Fatal Err Slot # 系统 BIOS 已报告组件的 PCIe 致命错误,该组件所在的 PCI 配置空间位于总线 ##,设备 ##,功能 ##。 系统 BIOS 已报告组件的 PCIe 致命错误,该组件位于...