Rol*_*olf 4 php error-handling
我正在尝试找到一种干净的方法来处理致命和严重错误(即没有输出缓冲),并且我读到在register_shutdown_function中使用HTTP头是不可能的.
问题是,当发生严重错误时,我想重定向到通用的静态错误页面(例如:服务不可用).
我应该怎么做 ?
显示或使用Javascript似乎不是令人满意的解决方案.
谢谢你的帮助 !
有一个解决方案(确实检测到解析错误),与您所读到的相反:
我在生产服务器上运行一个网站,如果确实存在致命错误,那么我们不显示任何错误也不显示任何白页是至关重要的.目前,我们还没有测试服务器,所以很难理解.
在我们网站上显示的每个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"
干杯!