自定义错误处理系统效率

时间:2013-08-25 23:57:02

标签: php error-handling mysqli

我有一些神经过时的日子试图在我的网站内建立一个好的错误处理系统。

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

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

我的系统有3个部分,每个部分我都不确定它在最佳实践和效率方面的位置。

第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步处理后数学

现在有一个错误,我需要决定如何继续前进,我的系统插入退出脚本并转到标准错误页面说“opps!出错了”。

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

是否有更好的处理错误的方法,此系统适用于意外错误。预期的错误会以不同的方式处理并显示给用户。

1 个答案:

答案 0 :(得分:1)

是的,你对自己的怀疑是正确的 - 所有这三个步骤都是错误的。

  • 首先,由于一些非常奇怪的原因您没有记录错误消息本身。如何在没有错误消息的情况下修复错误?记录诸如“无法处理查询...”之类的内容有什么用?
  • 接下来,你必须检查每个操作的结果 - 所以,准备也必须检查。
  • 接下来,很难在不知道错误发生的地方发现错误。某些调试回溯必须包含在错误消息中。
  • 接下来,不应该有Location标题,只有Status:500。因此,不要重定向到错误页面,只需包含它。
  • 最后,所有上述任务必须在一个地方执行,即 - 在注册为custom error handler
  • 的功能中

所以,场景必须像这样

在你的bootstrap文件中

创建一个像这样的代码

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);

并记录所有错误