在Apache下使用PHP设置HTTP响应代码

8
在PHP中(特别是在Apache下),有两种方法可以设置HTTP响应代码: 方法1:
http_response_code(404);

方法二:
header("HTTP/1.0 404 Not Found");

我的问题如下:
  1. 除了http_response_code只适用于PHP 5.4或更高版本之外,这两种方法有什么区别?为什么/何时使用其中一种方法?
  2. 在使用第一个示例时,原因短语来自哪里?(我已经检查过,确实会生成一个原因短语)

3
好问题。不知道为什么它被严重地踩了。 - user487772
1个回答

11

由于没有明显原因被投票下降,我已经通过查看PHP源代码自己回答了这个问题。希望这能作为其他人尝试解决此问题的参考。

这两种方法本质上具有相同的功能。 http_response_code 基本上是一种快捷方式来编写 http 状态头,其额外的好处是 PHP 将从在 php-src/main/http_status_codes.h 中维护的枚举值中将您的响应代码与之匹配以提供适当的 Reason Phrase

请注意,这意味着您的响应代码必须与 PHP 知道的响应代码匹配。使用此方法无法创建自己的响应代码,但使用 header 方法可以创建自定义代码。还要注意,http_response_code 仅适用于 PHP 5.4.0 及更高版本。

总之 - 使用 http_response_codeheader 设置响应代码的区别:

  1. 使用 http_response_code 将导致 PHP 从硬编码到 PHP 源代码中的 Reason Phrases 列表中匹配并应用 Reason Phrase。

  2. 由于上述第1点,如果使用 http_response_code,则必须设置 PHP 知道的代码。您无法设置自定义代码,但是如果使用 header 函数,则可以设置自定义代码(和 Reason Phrase)。

  3. http_response_code 仅适用于 PHP 5.4.0 及更高版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接