自定义错误处理系统效率



为了在我的站点中建立一个良好的错误处理系统,我度过了几天的紧张时光。

我的错误处理系统只关注意外错误,例如mysqli错误

我的网站运行许多mysqli查询,这意味着可能会出现错误。

我的系统有三个部分,每一个我都不确定它在最佳实践和效率中的地位。

步骤1捕获错误

$query = "
SELECT * FROM `users_account_activations` WHERE `user_ip` =?
";
$statement = $databaseHandler->mysqli->prepare($query);
$statement->bind_param('s', $userIp);
$statement->execute();
$statement->store_result();
//record error, if any
$databaseHandler->mysqli->error ? error = true : error = false; 
  • 这是在准备好的语句中捕捉错误的好方法吗?

  • 在查询结束时查找错误会不会在准备阶段发现错误?或者当准备阶段失败时,所有其他失败(如多米诺骨牌倒下)

步骤2记录错误

error_log("Could not process query...", 3, 'log/default.log'); 
  • 这是记录错误的合适方法吗?就像打开文件蒸汽的系统一样

第3步处理数学运算后的

现在出现了一个错误,我需要决定如何继续,我的系统会退出脚本,并转到一个标准的错误页面,上面写着"哎呀!出了问题"。

header('location: errorpage.php'); exit();
  • 改变标题是一个好方法吗?我知道关于何时可以使用页眉的限制

有没有更好的方法来处理错误,这个系统是针对意外错误的。预期的错误会得到处理,并以不同的方式显示给用户。

是的,你的疑虑是对的——所有三个步骤都是错误的。

  • 首先,由于某种非常奇怪的原因,您没有记录错误消息本身。应该如何在没有错误消息的情况下修复错误?像"无法处理查询…"这样的日志记录有什么用
  • 接下来,你必须检查每个操作的结果——所以,准备也必须检查
  • 接下来,如果不知道错误发生在哪里,就很难发现错误。某些调试回溯必须包含在错误消息中
  • 接下来,不应该有Location头,而应该只有Status:500。所以,与其重定向到错误页面,不如包含它
  • 最后,前面提到的所有任务都必须在一个地方执行,即在注册为自定义错误处理程序的函数中

所以,场景必须像这个

在引导文件中创建一个类似的代码

set_error_handler("myErrorHandler");
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    error_log("$errstr in $errfile:$errline");
    header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
    readfile("500.html");
    exit;
}

然后,让你的mysqli代码像这样

$stmt = $mysqli->prepare("qwefq") or trigger_error($mysqli->error);

并将所有错误记录在中

最新更新