如何处理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");
}
}
分享到:
相关推荐
Fatal error: Class ‘COM’ not found in XXXXXXXXX 没发现 COM 类,php代码主要是调用一些系统的信息,初想应该是php没配置好,在stackoverflow找到答案,是讨论xampp的,要延伸开来,我加了几个要点: ★ php 根...
这一错误信息通常出现在尝试启动Unigraphics(简称UG,现称为NX)软件时,意味着系统检测到一个致命错误,无法继续执行。此问题可能由多种因素引起,包括但不限于软件兼容性问题、系统文件损坏、注册表错误或硬件...
在PHP开发过程中,使用session_start()函数初始化会话时,可能会遇到致命错误,即Fatal error session_start()错误。这类错误通常会中断脚本的执行,并显示错误信息,告诉开发者未能初始化存储模块。为了解决此类...
error_reporting(E_ALL & ~E_NOTICE); ``` #### 错误级别常量 在设置错误级别时,需要了解每个错误级别的含义。下面列出了一些常见的错误级别及其描述: - **E_ERROR**: 致命的运行时错误。这些错误是不可恢复的...
fatal error: pcre2.h: No such file or directory 27 | #include "pcre2.h" 安装swoole遇到错误,把pcre2.h 放到、usr/include下
**PHP严重致命错误处理:PHP Fatal error: Cannot redeclare class or function** PHP编程过程中,遇到“PHP Fatal error: Cannot redeclare class or function”的错误,意味着你试图重新定义一个已经存在的类或...
但是,`set_error_handler`并不能捕获到E_ERROR级别的致命错误,因此在某些情况下,它并不能完全解决问题。 相对地,`register_shutdown_function`则可以在脚本执行完毕后或者在发生致命错误时执行预定义的函数。这...
本文实例讲述了ThinkPHP提示错误Fatal error: Allowed memory size的解决方法。分享给大家供大家参考。具体分析如下: 如果你的ThinkPHP提示你:致命错误(Fatal error: Allowed memory size),根据网上说的提高...
然而,在某些情况下,我们可能会遇到 "Fatal error: Call to undefined function curl_init()" 这样的错误信息,这是因为 PHP 无法找到 curl_init() 函数的原因。 本文将详细介绍如何解决这个错误,并提供相关的...
在进行PHP分页开发的过程中,开发者可能会遇到一个常见的错误——Fatal error,该错误主要是因为某个函数或类在代码执行过程中被重复声明所导致的。具体到此文档提及的情况,错误提示为“Fatal error: Cannot ...
在Web开发中,致命错误(fatal error)是最为严重的一种错误,它会导致脚本立即终止运行,并且由于错误导致的终止并不会被常规的错误处理机制捕获。如果在PHP配置中将display_errors选项设置为off,用户在访问时会...
从标题来看,“fatl错误信息”似乎是指一种特定的错误提示或日志条目,通常与移动设备(如智能手机)的操作有关。而在描述中提到的是“fate的error信息”,这可能是一种笔误或者特定术语的使用;我们可以理解为这指...
然而,当你尝试使用 `ZipArchive` 类时,如果出现 "Fatal error: Class ZipArchive not found" 的错误,这通常意味着PHP环境中未启用相应的ZIP扩展。以下是解决这个问题的步骤: 1. **Windows环境的解决办法**: -...
在开始之前,确保你的开发环境已经安装了Qt,并且有C++的开发工具,比如MinGW或MSVC。接着,你需要安装Perl,因为QtXlsxWriter的构建过程可能需要用到Perl脚本。可以通过官方渠道下载并安装Perl解释器。 解压...
标题中提到的“PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()”是指在PHP编程过程中遇到的一个致命错误,错误提示表明尝试调用了一个未定义的函数“bcmul()”。解决这个问题通常需要确保服务器上安装了包含...
首先,需要了解的是,在PHP中,错误处理通常可以分为两种情况:一个是正常的错误处理,另一个是致命错误的处理。register_shutdown_function主要用于处理后者,即脚本因错误意外停止,而非脚本主动调用exit()或者...
当编译内核时遇到“fatal error: linux/compiler-gcc5.h: No such file”错误,这表明系统无法找到对应的编译器头文件,这可能是由于以下几个原因: 1. **源代码缺失**:确保你已经下载了完整的Linux内核源代码树。...
error_handler()`不会捕获某些严重级别的错误,比如`E_ERROR`、`E_PARSE`、`E_CORE_ERROR`、`E_CORE_WARNING`、`E_COMPILE_ERROR`、`E_COMPILE_WARNING`,这些错误会导致脚本立即停止执行,因此无法通过自定义错误...