Header::isSent()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
namespace Redaxscript;
3
4
use function header;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Redaxscript\header.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
5
use function header_remove;
6
use function headers_list;
7
use function headers_sent;
8
use function http_response_code;
9
10
/**
11
 * children class to add and remove the header
12
 *
13
 * @since 3.3.0
14
 *
15
 * @package Redaxscript
16
 * @category Header
17
 * @author Henry Ruhs
18
 */
19
20
class Header
21
{
22
	/**
23
	 * init the class
24
	 *
25
	 * @since 3.3.0
26
	 */
27
28 2
	public static function init() : void
29
	{
30 2
		self::add(
31
		[
32 2
			'X-Content-Type-Options: nosniff',
33
			'X-Frame-Options: sameorigin',
34
			'X-XSS-Protection: 1; mode=block'
35
		]);
36 2
		self::remove('X-Powered-By');
37 2
	}
38
39
	/**
40
	 * get the header array
41
	 *
42
	 * @since 3.3.0
43
	 *
44
	 * @return array
45
	 */
46
47 1
	public static function getArray() : array
48
	{
49 1
		return headers_list();
50
	}
51
52
	/**
53
	 * add the header
54
	 *
55
	 * @since 3.3.0
56
	 *
57
	 * @param string|array $header
58
	 * @param bool $replace
59
	 *
60
	 * @return bool
61
	 */
62
63 6
	public static function add($header = null, bool $replace = true) : bool
64
	{
65 6
		if (!self::isSent())
66
		{
67 5
			foreach ((array)$header as $value)
68
			{
69 5
				header($value, $replace);
70
			}
71 5
			return true;
72
		}
73 1
		return false;
74
75
	}
76
77
	/**
78
	 * remove the header
79
	 *
80
	 * @since 3.3.0
81
	 *
82
	 * @param string|array $header
83
	 *
84
	 * @return bool
85
	 */
86
87 3
	public static function remove($header = null) : bool
88
	{
89 3
		if (!self::isSent())
90
		{
91 2
			foreach ((array)$header as $value)
92
			{
93 2
				header_remove($value);
94
			}
95 2
			return true;
96
		}
97 1
		return false;
98
	}
99
100
	/**
101
	 * is header sent
102
	 *
103
	 * @since 3.3.0
104
	 *
105
	 * @return bool
106
	 */
107
108 8
	public static function isSent() : bool
109
	{
110 8
		return headers_sent();
111
	}
112
113
	/**
114
	 * response code
115
	 *
116
	 * @since 4.0.0
117
	 *
118
	 * @param int $code
119
	 *
120
	 * @return int
121
	 */
122
123 1
	public static function responseCode(int $code = null) : int
124
	{
125 1
		return http_response_code($code);
126
	}
127
128
	/**
129
	 * redirect to location
130
	 *
131
	 * @since 3.3.0
132
	 *
133
	 * @param string $location
134
	 *
135
	 * @return bool
136
	 */
137
138 1
	public static function doRedirect(string $location = null) : bool
139
	{
140 1
		return self::add('Location: ' . $location);
141
	}
142
143
	/**
144
	 * content type
145
	 *
146
	 * @since 3.3.0
147
	 *
148
	 * @param string $type
149
	 *
150
	 * @return bool
151
	 */
152
153 1
	public static function contentType(string $type = null) : bool
154
	{
155 1
		return self::add('Content-Type: ' . $type);
156
	}
157
}
158