Php 数据库服务器文件的正确状态代码为';什么东西没找到?

Php 数据库服务器文件的正确状态代码为';什么东西没找到?,php,httpresponse,http-status-codes,Php,Httpresponse,Http Status Codes,我正在我的网站上实现一个数据库,并学习http状态码。我正在尝试为请求可能产生的任何问题实施解决方案,我考虑了在连接到数据库进行更新或查询时,如果服务器端不存在该文件,正确的状态代码会是什么(可能已暂时关闭该文件以停止任何数据传输?)。我将实现一个自定义消息给用户以通知他们,但我想知道这个响应的“正确”状态代码是什么?我已经缩小到404(找不到文件)或503(服务不可用)或其他我不知道的 PHP代码(如果有帮助) try { if (!file_exists("dbConn.php"))

我正在我的网站上实现一个数据库,并学习http状态码。我正在尝试为请求可能产生的任何问题实施解决方案,我考虑了在连接到数据库进行更新或查询时,如果服务器端不存在该文件,正确的状态代码会是什么(可能已暂时关闭该文件以停止任何数据传输?)。我将实现一个自定义消息给用户以通知他们,但我想知道这个响应的“正确”状态代码是什么?我已经缩小到404(找不到文件)或503(服务不可用)或其他我不知道的

PHP代码(如果有帮助)

try {
    if (!file_exists("dbConn.php")) {
        throw new Exception("File Not Found");
    } else {
        require_once("dbConn.php");
        $dbConn = getConnection();
    }
    // other code
} catch (Exception $e) {
    if ($e->getMessage() == "Bad Request") {
        http_response_code(400); // This is for an exception thrown in 'other code' (not displayed)
    } else {
        // http_response_code(404) or http_response_code(503) or other?
    }
}

5xx状态代码在这里是合适的。503或500似乎都是合理的,这取决于预期的和意外的,你认为这个特定的错误是什么。 404表示用户请求的资源不存在。他们在这件事上做了什么?某些支持后端服务可能不存在或可能失败,但这与用户无关。HTTP状态代码指的是HTTP资源,而不是后端基础设施。并且用户请求了正确的资源

返回任何4xx状态代码时,问问自己:

用户可以做些什么来修改他们的请求以纠正问题

如果答案是否定的,那么这不是客户端错误,而是服务器错误。这就把问题放到了5xx区域


另一方面,这看起来像是对异常的不当使用:

if (!file_exists("dbConn.php")) {
    throw new Exception("File Not Found");
} else {
    //...
}
这基本上是对控制流使用异常,这是
if
已经用于的。您已经在
if
条件下确定您要查找的文件不可用。在
if
块中,您可以精心设计响应并结束脚本的执行

因此,可能会出现以下情况:

if (!file_exists("dbConn.php")) {
    http_response_code(500);
    die 'Unable to process the request.';
}
// No need for an "else" here, just continue as normal

这类事情通常被称为“保护条款”。在整个操作开始时,您检查前提条件,必要时失败。如果所有的保护条款都通过,则代码可以安全地继续。

如果文件不存在,则404是合适的。这是一个文件,不是一项服务。@aynber感谢您的澄清,我有点困惑,因为4xx代码列在“客户端错误”下,我认为这可能是服务器问题,因为它在web服务器上不存在。此外,该数据库代码的附带代码是将用户注册到我的网站,这就是为什么我认为这可能是一个服务不可用错误404表示通过HTTP请求的资源未找到(因此以后不应再次请求)。从语义上讲这就是这里发生的事情吗?听起来他们请求了正确的资源,但服务器端逻辑当前失败。也就是说,用户没有责任了解或关心数据库。他们所做的只是向资源发出请求。该资源正在内部失效。503对我来说似乎合适。甚至可能是500。至少是5xx,因为请求本身是正确的
如果(!file_存在(“dbConn.php”)
已经是可以检查和响应的逻辑条件。抛出一个异常只是为了在其他地方响应它,这就是将异常用于控制流,这正是
if
的初衷。@JLi_2398:在考虑4xx代码时,问问自己。。。“用户可以做些什么来修改他们的请求以更正问题?”在这种情况下,答案似乎是否定的。服务器端使用的某些文件可能不存在,但这不是用户请求的文件。