gpt4 book ai didi

php - 有没有办法重定向到 register_shutdown_function 中的错误页面?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:00 25 4
gpt4 key购买 nike

我正在尝试找到一种干净的方法来处理致命和严重错误(即没有输出缓冲),并且我读到在 register_shutdown_function 中使用 HTTP header 是不可能的。

问题是,当发生严重错误(例如:服务不可用)时,我想重定向到通用静态错误页面。

我该怎么办?

显示一个或使用 Javascript 似乎都不是令人满意的解决方案。

感谢您的帮助!

最佳答案

有一个解决方案(确实检测解析错误),与您所读的相反:

我在生产服务器上运行一个网站,如果确实存在 fatal error ,我们不显示任何错误或显示任何白页是至关重要的。目前,我们没有测试服务器,所以很难搞清楚。

生产就绪的 PHP 错误处理

我们网站上显示的每个 PHP 文件都包含一个位于 public_html/目录上方一级的文件 base.php,因此我们的想法是先在 base.php 的最顶部设置一个错误处理程序:

base.php -- 将其插入代码顶部:

//DO NOT DISPLAY ERRORS TO USERini_set("display_errors", 0);ini_set("log_errors", 1);//Define where do you want the log to go, syslog or a file of your liking withini_set("error_log", dirname(__FILE__).'/php_errors.log');register_shutdown_function(function(){    $last_error = error_get_last();    if ( !empty($last_error) &&          $last_error['type'] & (E_ERROR | E_COMPILE_ERROR | E_PARSE | E_CORE_ERROR | E_USER_ERROR)       )    {       require_once(dirname(__FILE__).'/public_html/maintenance.php');       exit(1);    }});

现在 base.php 的想法是根本不包含太多代码,没有功能,只有其他包含或站点运行所需的文件。在测试我的例子时,我有类似

include_once(dirname(__FILE__).'/public_html/lib/foobar.php');

所以我去了 foobar.php 并犯了一个语法错误,将 function... 变成了 function。通常会显示错误或显示白页,但由于 register_shutdown_function(),现在 public_html/maintenance.php 页面显示一条消息,内容如下:

抱歉,我们目前遇到技术问题。请在几分钟后刷新此页面,看看我们是否已解决问题。

当然用户不知道这是“maintenance.php”

干杯!

关于php - 有没有办法重定向到 register_shutdown_function 中的错误页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3108361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com