【问题标题】:Redirect to another page when fatal error occurs发生致命错误时重定向到另一个页面
【发布时间】:2019-12-12 12:19:24
【问题描述】:

我在当前正在处理的应用程序中收到以下致命错误。

致命错误:允许的内存大小为 134217728 字节已用尽(已尝试 分配 1245184 字节)在 C:\xampp\htdocs\myproject\vendor\tecnickcom\tcpdf\tcpdf.php 上线 7317

警告:unlink(./Logo.jpg): No such file or directory in C:\xampp\htdocs\myproject\vendor\tecnickcom\tcpdf\tcpdf.php 上线 7801

我想做的是在发生致命错误时重定向到另一个页面。以下是我正在玩但没有运气的代码。

set_time_limit(0);
use Spipu\Html2Pdf\Html2Pdf;

try {
    ...
    } catch (Throwable $e) {
        header('Location: http://localhost:8080/docs/generate.php'); exit;
}

这里的问题是重定向不会发生致命错误。

请指教。

【问题讨论】:

  • 我认为这是不可能的。当你使用所有可用内存时,没有办法执行更多指令,事件创建新的 Throwable 对象来表示异常。

标签: php php-7.2


【解决方案1】:

您无法捕获 PHP 中的致命错误。但是有一种解决方法对您的情况很有用。

您可以使用register_shutdown_function 注册关机回调。

register_shutdown_function(function() {
    require_once dirname(__FILE__) . '/file.php'; // use ABSOLUTE path
    die();
});

您可能想知道使用header 将用户重定向到另一个页面,而不是包含file.php 并停止脚本的执行。好吧,你会收到一个警告:

无法修改标头信息 - 标头已由...发送

由于您无法在关闭回调中发送任何 HTTP 标头。

【讨论】:

  • 来自 php.net - “如果你想对函数中的文件做一些事情,在 register_shutdown_function() 中注册,使用文件的绝对路径而不是相对路径。因为当脚本处理完成时,当前工作目录chages to ServerRoot" 因此,在重定向时,我们需要类似 - require_once(dirname(FILE).'/full path to file/file.php');die;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 2011-08-07
相关资源
最近更新 更多