How to send a status code in PHP, without maintaining an array of status names?
There is a new function for this in PHP >= 5.4.0 http_response_code
Simply do http_response_code(404)
.
If you have a lower PHP version try header(' ', true, 404);
(note the whitespace in the string).
If you want to set the reason phrase as well try:
header('HTTP/ 433 Reason Phrase As You Wish');
The actual text of the code is irrelevant. You could do
header('The goggles, they do nawtink!', true, 404);
and it'd still be seen as a 404 by the browser - it's the code that matters.
Zend Framework has a packaged solution in Zend_Http_Response
Zend_Http_Response::$messages
contains:
/** * List of all known HTTP response codes - used by responseCodeAsText() to * translate numeric codes to messages. * * @var array */protected static $messages = array( // Informational 1xx 100 => 'Continue', 101 => 'Switching Protocols', // Success 2xx 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', // Redirection 3xx 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', // 1.1 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', // 306 is deprecated but reserved 307 => 'Temporary Redirect', // Client Error 4xx 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', // Server Error 5xx 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', 509 => 'Bandwidth Limit Exceeded');
Even if you're not using zend-framework you might be able to break this out for personal use.