设置响应状态代码PHP <=5.3PHP >=5.4

我有一个API调用,我需要能够运行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过正确的凭据,我需要返回 401 状态。如果他们尚未发送支持的请求格式,我需要返回 400 状态。

因为它是一个API,所以我真正想做的就是设置响应状态,并使用一条简单,愚蠢的消息退出,说明请求失败的原因(可能使用)。刚好足以完成工作,但我无法让它正常工作。我尝试过使用PHP和Cake的(这都在控制器中),但是尽管我收到退出消息,但标题显示状态。exitheader()$this->header()200 OK

使用下面的代码,我收到消息,但标头未设置。我错过了什么?

  if( !$this->auth_api() ) {
    header( '401 Not Authorized' );
    exit( 'Not authorized' );
  }

答案 1

PHP <=5.3

header() 函数具有状态代码的参数。如果指定它,服务器将从那里处理它。

header('HTTP/1.1 401 Unauthorized', true, 401);

PHP >=5.4

看看Gajus的答案:https://stackoverflow.com/a/14223222/362536


答案 2

从 PHP 5.4 开始,您可以使用http_response_code

http_response_code(404);

这将负责设置正确的HTTP标头。

如果您运行的是 PHP < 5.4,那么您有两个选择:

  1. 升级。
  2. 使用此http_response_code在 PHP 中实现的函数。

推荐