gpt4 book ai didi

php - 定制错误处理系统的效率

转载 作者:行者123 更新时间:2023-12-03 08:32:55 26 4
gpt4 key购买 nike

我花了几天的时间试图在我的站点中建立一个好的错误处理系统。

我的错误处理系统仅关注意外错误,例如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();
  • 是更改 header 的一种好方法吗?我知道关于何时可以使用 header 的限制。

  • 有没有更好的处理错误的方法,该系统用于意外错误。预期的错误会得到处理,并以不同的方式显示给用户。

    最佳答案

    是的,您的怀疑是对的-这三个步骤都是错误的。

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

  • 因此,方案必须像这样

    在您的引导文件中创建这样的代码
    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);

    并记录所有错误

    关于php - 定制错误处理系统的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18434896/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com