sg-
sg-

Reputation: 2176

Setting a HTTP response code in PHP (under Apache)

Given the following two methods for setting a HTTP response code in PHP (specifically, under Apache):

Method 1:

http_response_code(404);

Method 2:

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

My questions are:

  1. Aside from the fact that http_response_code is only available in PHP 5.4 or greater, what are the differences between the two approaches and why/when to use one over the other?
  2. Where does the Reason Phrase come from when using the first example? (I've checked and a Reason Phrase is generated from somewhere)

Upvotes: 8

Views: 1167

Answers (1)

sg-
sg-

Reputation: 2176

Since I'm being downvoted into oblivion for no apparent reason, I've managed to answer this myself by scouring through the PHP source code. Hopefully this serves as a reference for anyone else trying to work this out.

The two methods are essentially functionally equivalent. http_response_code is basically a shorthand way of writing a http status header, with the added bonus that PHP will work out a suitable Reason Phrase to provide by matching your response code to one of the values in an enumeration it maintains within php-src/main/http_status_codes.h.

Note that this means your response code must match a response code that PHP knows about. You can't create your own response codes using this method, however you can using the header method. Note also that http_response_code is only available in PHP 5.4.0 and higher.

In summary - The differences between http_response_code and header for setting response codes:

  1. Using http_response_code will cause PHP to match and apply a Reason Phrase from a list of Reason Phrases that are hard-coded into the PHP source code.

  2. Because of point 1 above, if you use http_response_code you must set a code that PHP knows about. You can't set your own custom code, however you can set a custom code (and Reason Phrase) if you use the header function.

  3. http_response_code is only available in PHP 5.4.0 and higher

Upvotes: 11

Related Questions