MediaWiki REL1_34
HeaderContainer.php
Go to the documentation of this file.
1<?php
2
3namespace MediaWiki\Rest;
4
13 private $headerLists = [];
14 private $headerLines = [];
15 private $headerNames = [];
16
23 public function resetHeaders( $headers = [] ) {
24 $this->headerLines = [];
25 $this->headerLists = [];
26 $this->headerNames = [];
27 foreach ( $headers as $name => $value ) {
28 $this->headerNames[ strtolower( $name ) ] = $name;
29 list( $valueParts, $valueLine ) = $this->convertToListAndString( $value );
30 $this->headerLines[$name] = $valueLine;
31 $this->headerLists[$name] = $valueParts;
32 }
33 }
34
57 private function convertToListAndString( $value ) {
58 if ( is_array( $value ) ) {
59 return [ array_values( $value ), implode( ', ', $value ) ];
60 } else {
61 return [ [ $value ], $value ];
62 }
63 }
64
71 public function setHeader( $name, $value ) {
72 list( $valueParts, $valueLine ) = $this->convertToListAndString( $value );
73 $lowerName = strtolower( $name );
74 $origName = $this->headerNames[$lowerName] ?? null;
75 if ( $origName !== null ) {
76 unset( $this->headerLines[$origName] );
77 unset( $this->headerLists[$origName] );
78 }
79 $this->headerNames[$lowerName] = $name;
80 $this->headerLines[$name] = $valueLine;
81 $this->headerLists[$name] = $valueParts;
82 }
83
90 public function addHeader( $name, $value ) {
91 list( $valueParts, $valueLine ) = $this->convertToListAndString( $value );
92 $lowerName = strtolower( $name );
93 $origName = $this->headerNames[$lowerName] ?? null;
94 if ( $origName === null ) {
95 $origName = $name;
96 $this->headerNames[$lowerName] = $origName;
97 $this->headerLines[$origName] = $valueLine;
98 $this->headerLists[$origName] = $valueParts;
99 } else {
100 $this->headerLines[$origName] .= ', ' . $valueLine;
101 $this->headerLists[$origName] = array_merge( $this->headerLists[$origName],
102 $valueParts );
103 }
104 }
105
111 public function removeHeader( $name ) {
112 $lowerName = strtolower( $name );
113 $origName = $this->headerNames[$lowerName] ?? null;
114 if ( $origName !== null ) {
115 unset( $this->headerNames[$lowerName] );
116 unset( $this->headerLines[$origName] );
117 unset( $this->headerLists[$origName] );
118 }
119 }
120
126 public function getHeaders() {
127 return $this->headerLists;
128 }
129
137 public function getHeader( $name ) {
138 $headerName = $this->headerNames[ strtolower( $name ) ] ?? null;
139 if ( $headerName === null ) {
140 return [];
141 }
142 return $this->headerLists[$headerName];
143 }
144
150 public function hasHeader( $name ) {
151 return isset( $this->headerNames[ strtolower( $name ) ] );
152 }
153
161 public function getHeaderLine( $name ) {
162 $headerName = $this->headerNames[ strtolower( $name ) ] ?? null;
163 if ( $headerName === null ) {
164 return '';
165 }
166 return $this->headerLines[$headerName];
167 }
168
174 public function getHeaderLines() {
175 return $this->headerLines;
176 }
177
185 public function getRawHeaderLines() {
186 $lines = [];
187 foreach ( $this->headerNames as $lowerName => $name ) {
188 if ( $lowerName === 'set-cookie' ) {
189 // As noted by RFC 7230 section 3.2.2, Set-Cookie is the only
190 // header for which multiple values cannot be concatenated into
191 // a single comma-separated line.
192 foreach ( $this->headerLists[$name] as $value ) {
193 $lines[] = "$name: $value";
194 }
195 } else {
196 $lines[] = "$name: " . $this->headerLines[$name];
197 }
198 }
199 return $lines;
200 }
201}
This is a container for storing headers.
addHeader( $name, $value)
Set a header or append to an existing header.
getHeader( $name)
Get the header with a particular name, or an empty array if there is no such header.
removeHeader( $name)
Remove a header.
getHeaders()
Get header arrays indexed by original name.
resetHeaders( $headers=[])
Erase any existing headers and replace them with the specified header arrays or values.
setHeader( $name, $value)
Set or replace a header.
convertToListAndString( $value)
Take an input header value, which may either be a string or an array, and convert it to an array of h...
getRawHeaderLines()
Get an array of strings of the form "Name: Value", suitable for passing directly to header() to set r...
hasHeader( $name)
Return true if the header exists, false otherwise.
getHeaderLine( $name)
Get the specified header concatenated into a comma-separated string.
getHeaderLines()
Get all header lines.
$lines
Definition router.php:61