Sho*_*hoe 5 php error-handling
每个人都说在活动站点中"显示启用错误"是不好的(由于某些安全问题).
现在,我们要考虑2个案例:
现在,对于案例#1:
我们希望看到错误.怎么样?
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
Run Code Online (Sandbox Code Playgroud)
没有比这更简单的了.我们还可以为除Parse和Fatal之外的所有错误定制错误处理程序.
相反,如果案例是#2:
我们希望能够停用消息:
ini_set('error_reporting', 0);
ini_set('display_errors', 0);
Run Code Online (Sandbox Code Playgroud)
没关系.但是如何向用户展示一个友好的信息,比如"嘿嘿,有些东西真的很有用.我不保证你我们正在努力修复它,因为我们非常懒惰." 您应该再次启用错误并只使用该函数,set_error_handler()并希望不会发生解析或致命错误.但我的第一个问题是:
问题1:是否可以避免错误报告并在出现问题时加载自定义脱机页面?我的意思是,是有可能有
ini_set('error_reporting', 0);和ini_set('display_errors', 0);,仍然能够告诉PHP加载自定义错误页?
现在另一个:
问题2:我开发了一个类,它具有
set_error_handler()日志错误的功能,发生在数据库中.通过这种方式,我可以跟踪黑客企图和其他很酷的东西.(是的,我总是确定数据库是可访问的,因为如果我们无法连接到数据库,我的应用程序将关闭).这值得吗?
前段时间我创建了一个小系统,当发生致命错误/抛出未捕获异常时,会将您重定向到错误页面.可以假设,每个请求都由一个文件处理并在此文件中结束,因此通过到达此文件的末尾,我确信一切都正常.在这种情况下,我设置了在错误页面上重定向的功能并将其注册为关闭功能 - 因此它将在所有请求结束时被调用.现在在这个函数中,我检查干净关闭的条件,如果满足,我什么都不做,输出被刷新到浏览器,否则缓冲区被清除,只发送重定向到错误页面的标题.
此代码的简化版本:
<?php
function redirect_on_error(){
if(!defined('EVERYTHING_WENT_OK')){
ob_end_clean();
header('Location: error.html');
}
}
register_shutdown_function('redirect_on_error');
ob_start();
include 'some/working/code.php';
echo "Now I'm going to call undefined function or throw something bad";
undefined_function();
throw new Exception('In case undefined function is defined.');
define('EVERYTHING_WENT_OK', TRUE);
exit;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4872 次 |
| 最近记录: |