Php 自定义错误处理系统效率
为了在我的站点中建立一个好的错误处理系统,我花了好几天的时间 我的错误处理系统只关注意外错误,例如mysqli错误 我的站点运行许多mysqli查询,这意味着可能会发生错误 我的系统有三个部分,每一部分我都不确定它在最佳实践和效率中的位置 步骤1:捕捉错误Php 自定义错误处理系统效率,php,error-handling,mysqli,Php,Error Handling,Mysqli,为了在我的站点中建立一个好的错误处理系统,我花了好几天的时间 我的错误处理系统只关注意外错误,例如mysqli错误 我的站点运行许多mysqli查询,这意味着可能会发生错误 我的系统有三个部分,每一部分我都不确定它在最佳实践和效率中的位置 步骤1:捕捉错误 这是一种在准备好的语句中捕捉错误的好方法吗 在查询结束时查找错误不会在准备阶段捕获错误吗?或者,当准备阶段失败时,所有其他阶段都失败了(比如掉落的多米诺骨牌) 步骤2:记录错误 这是记录错误的合适方式吗?与打开文件的系统相比 步骤3:
- 这是一种在准备好的语句中捕捉错误的好方法吗
- 在查询结束时查找错误不会在准备阶段捕获错误吗?或者,当准备阶段失败时,所有其他阶段都失败了(比如掉落的多米诺骨牌)
- 这是记录错误的合适方式吗?与打开文件的系统相比
- 更改页眉是一个好方法吗?我知道页眉在什么时候可以使用它的局限性
是否有更好的方法处理错误,此系统适用于意外错误。预期的错误会得到处理,并以不同的方式显示给用户。是的,您的怀疑是正确的-所有这三个步骤都是错误的
- 首先,由于一些非常奇怪的原因,您没有记录错误消息本身。在没有错误消息的情况下,应该如何修复错误?像“无法处理查询…”这样的日志记录有什么用李>
- 接下来,您必须检查每个操作的结果-因此,也必须检查prepare李>
- 其次,如果不知道错误发生在哪里,就很难发现错误。一些调试回溯必须包含在错误消息中李>
- 接下来,不应该有位置标题,而应该只有状态: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;
}
$stmt = $mysqli->prepare("qwefq") or trigger_error($mysqli->error);
在引导文件中创建如下代码
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;
}
$stmt = $mysqli->prepare("qwefq") or trigger_error($mysqli->error);
然后,让您的mysqli代码如下
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;
}
$stmt = $mysqli->prepare("qwefq") or trigger_error($mysqli->error);
记录所有错误您真的需要像$DatabaseHandlingHandlerUsedToHandLeadDatabase这样的变量名吗?您不能只使用$db或$mysqli吗?谢谢,当您调用函数error log时,它将错误放在哪里,是否将其放在默认错误日志文件中?你能创建自己的目的地吗?那么ajax请求呢,如何调用错误500,它只会在请求中调用错误,而不是在页面中调用错误,您会从ajax请求中查找错误并显示错误消息吗?错误日志目标由ini指令
error\u log
设置。如果未设置,则进入web服务器的错误日志。查看AJAX库文档-每个AJAX执行函数都有一个HTTP状态变量。您可以在JS中检查它,并相应地进行检查。查看jquery的statusCode示例好的,谢谢,帮助很大,我可以问什么是php引导文件吗,它只是您在每个页面上都需要的文件,是否可以要求它自动使用.htaccess,或者我必须手动要求它?是的,它是您在每个页面上都需要的文件。有一种方法可以通过php.ini/.htaccess实现,但我建议不要这样做