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

Rol*_*olf 4 php error-handling

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

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

我应该怎么做 ?

显示或使用Javascript似乎不是令人满意的解决方案.

谢谢你的帮助 !

rel*_*pse 9

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

我在生产服务器上运行一个网站,如果确实存在致命错误,那么我们不显示任何错误也不显示任何白页是至关重要的.目前,我们还没有测试服务器,所以很难理解.

生产就绪的PHP错误处理

在我们网站上显示的每个PHP文件都包含一个位于public_html /目录上方一步的文件base.php,因此我的想法是在base.php的最顶层设置一个错误处理程序,然后再做其他事情:

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

//DO NOT DISPLAY ERRORS TO USER
ini_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 with
ini_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并且出现了语法错误,将函数转换为有趣的问题.通常会显示错误或显示白页,但由于register_shutdown_function(),现在public_html/maintenance.php页面显示的消息如下:

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

当然,用户不知道这是"maintenance.php"

干杯!