HttpStatus   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 89
rs 10
c 0
b 0
f 0
wmc 7
lcom 0
cbo 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getMessage() 0 55 2
B header() 0 17 5
1
<?php
2
/**
3
 * List of HTTP status codes.
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License along
16
 * with this program; if not, write to the Free Software Foundation, Inc.,
17
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
 * http://www.gnu.org/copyleft/gpl.html
19
 *
20
 * @file
21
 */
22
23
/**
24
 * @todo document
25
 */
26
class HttpStatus {
27
28
	/**
29
	 * Get the message associated with an HTTP response status code
30
	 *
31
	 * @param int $code Status code
32
	 * @return string|null Message, or null if $code is not known
33
	 */
34
	public static function getMessage( $code ) {
35
		static $statusMessage = [
36
			100 => 'Continue',
37
			101 => 'Switching Protocols',
38
			102 => 'Processing',
39
			200 => 'OK',
40
			201 => 'Created',
41
			202 => 'Accepted',
42
			203 => 'Non-Authoritative Information',
43
			204 => 'No Content',
44
			205 => 'Reset Content',
45
			206 => 'Partial Content',
46
			207 => 'Multi-Status',
47
			300 => 'Multiple Choices',
48
			301 => 'Moved Permanently',
49
			302 => 'Found',
50
			303 => 'See Other',
51
			304 => 'Not Modified',
52
			305 => 'Use Proxy',
53
			307 => 'Temporary Redirect',
54
			400 => 'Bad Request',
55
			401 => 'Unauthorized',
56
			402 => 'Payment Required',
57
			403 => 'Forbidden',
58
			404 => 'Not Found',
59
			405 => 'Method Not Allowed',
60
			406 => 'Not Acceptable',
61
			407 => 'Proxy Authentication Required',
62
			408 => 'Request Timeout',
63
			409 => 'Conflict',
64
			410 => 'Gone',
65
			411 => 'Length Required',
66
			412 => 'Precondition Failed',
67
			413 => 'Request Entity Too Large',
68
			414 => 'Request-URI Too Large',
69
			415 => 'Unsupported Media Type',
70
			416 => 'Request Range Not Satisfiable',
71
			417 => 'Expectation Failed',
72
			422 => 'Unprocessable Entity',
73
			423 => 'Locked',
74
			424 => 'Failed Dependency',
75
			428 => 'Precondition Required',
76
			429 => 'Too Many Requests',
77
			431 => 'Request Header Fields Too Large',
78
			500 => 'Internal Server Error',
79
			501 => 'Not Implemented',
80
			502 => 'Bad Gateway',
81
			503 => 'Service Unavailable',
82
			504 => 'Gateway Timeout',
83
			505 => 'HTTP Version Not Supported',
84
			507 => 'Insufficient Storage',
85
			511 => 'Network Authentication Required',
86
		];
87
		return isset( $statusMessage[$code] ) ? $statusMessage[$code] : null;
88
	}
89
90
	/**
91
	 * Output an HTTP status code header
92
	 *
93
	 * @since 1.26
94
	 * @param int $code Status code
95
	 */
96
	public static function header( $code ) {
0 ignored issues
show
Coding Style introduced by
header uses the super-global variable $_SERVER which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
97
		static $version = null;
98
		$message = self::getMessage( $code );
99
		if ( $message === null ) {
100
			trigger_error( "Unknown HTTP status code $code", E_USER_WARNING );
101
			return false;
102
		}
103
104
		if ( $version === null ) {
105
			$version = isset( $_SERVER['SERVER_PROTOCOL'] ) &&
106
				$_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.0' ?
107
					'1.0' :
108
					'1.1';
109
		}
110
111
		header( "HTTP/$version $code $message" );
112
	}
113
114
}
115