Completed
Push — master ( 0ea243...da58d4 )
by Henry
10:25 queued 33s
created

includes/Header.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
namespace Redaxscript;
3
4
use function header;
0 ignored issues
show
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 1
	public static function init() : void
29
	{
30 1
		self::add(
31
		[
32 1
			'X-Content-Type-Options: nosniff',
33
			'X-Frame-Options: sameorigin',
34
			'X-XSS-Protection: 1; mode=block'
35
		]);
36 1
		self::remove('X-Powered-By');
37 1
	}
38
39
	/**
40
	 * add the header
41
	 *
42
	 * @since 3.3.0
43
	 *
44
	 * @param string|array $header
45
	 * @param bool $replace
46
	 *
47
	 * @return bool
48
	 */
49
50 5
	public static function add($header = null, bool $replace = true) : bool
51
	{
52 5
		if (!self::isSent())
53
		{
54 4
			foreach ((array)$header as $value)
55
			{
56 4
				header($value, $replace);
57
			}
58 4
			return true;
59
		}
60 1
		return false;
61
62
	}
63
64
	/**
65
	 * remove the header
66
	 *
67
	 * @since 3.3.0
68
	 *
69
	 * @param string|array $header
70
	 *
71
	 * @return bool
72
	 */
73
74 2
	public static function remove($header = null) : bool
75
	{
76 2
		if (!self::isSent())
77
		{
78 1
			foreach ((array)$header as $value)
79
			{
80 1
				header_remove($value);
81
			}
82 1
			return true;
83
		}
84 1
		return false;
85
	}
86
87
	/**
88
	 * is header sent
89
	 *
90
	 * @since 3.3.0
91
	 *
92
	 * @return bool
93
	 */
94
95 6
	public static function isSent() : bool
96
	{
97 6
		return headers_sent();
98
	}
99
100
	/**
101
	 * get the header array
102
	 *
103
	 * @since 3.3.0
104
	 *
105
	 * @return array
106
	 */
107
108
	public static function getArray() : array
109
	{
110
		return headers_list();
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