在PHP中设置HTTP响应代码(在Apache下)

给出以下两种在PHP中设置HTTP响应代码的方法(特别是在Apache下):

方法1:

http_response_code(404); 

方法2:

 header("HTTP/1.0 404 Not Found"); 

我的问题是:

  1. 除了http_response_code仅在PHP 5.4或更高版本中可用,这两种方法之间有什么区别,以及为什么/何时使用一种方法?
  2. 在使用第一个例子时, 原因词组来自哪里? (我已经检查过,并且从某处产生了一个Reason Phrase)

由于没有明显的原因,我被淹没了遗忘,我已经设法通过浏览PHP源代码自己回答这个问题。 希望这可以作为其他人试图解决这个问题的参考。

这两种方法基本上在功能上是等价的。 http_response_code基本上是编写一个http状态头的一种简便的方式,另外还有一个额外的好处,即PHP可以通过将你的响应代码与枚举中的一个值进行匹配来提供一个合适的原因短语 ,它在php-src / main / http_status_codes.h 。

请注意,这意味着您的响应代码必须与PHP知道的响应代码相匹配。 您不能使用此方法创建自己的响应代码,但可以使用header方法。 另请注意, http_response_code仅在PHP 5.4.0及更高版本中可用。

总之 – http_response_codeheader设置响应码的区别:

  1. 使用http_response_code将使PHP匹配并应用硬编码到PHP源代码的原因短语列表中的原因短语。

  2. 因为上面的第1点,如果你使用http_response_code你必须设置一个PHP知道的代码。 您不能设置自己的自定义代码,但是如果使用header功能,则可以设置自定义代码(和原因短语)。

  3. http_response_code仅在PHP 5.4.0及更高版本中可用