Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
Uri.php
001 <?php
002
003 namespace OAuth\Common\Http\Uri;
004
005 use InvalidArgumentException;
006
007 /**
008 * Standards-compliant URI class.
009 */
010 class Uri implements UriInterface
011 {
012 /**
013 * @var string
014 */
015 private $scheme = 'http';
016
017 /**
018 * @var string
019 */
020 private $userInfo = '';
021
022 /**
023 * @var string
024 */
025 private $rawUserInfo = '';
026
027 /**
028 * @var string
029 */
030 private $host;
031
032 /**
033 * @var int
034 */
035 private $port = 80;
036
037 /**
038 * @var string
039 */
040 private $path = '/';
041
042 /**
043 * @var string
044 */
045 private $query = '';
046
047 /**
048 * @var string
049 */
050 private $fragment = '';
051
052 /**
053 * @var bool
054 */
055 private $explicitPortSpecified = false;
056
057 /**
058 * @var bool
059 */
060 private $explicitTrailingHostSlash = false;
061
062 /**
063 * @param string $uri
064 */
065 public function __construct($uri = null)
066 {
067 if (null !== $uri) {
068 $this->parseUri($uri);
069 }
070 }
071
072 /**
073 * @param string $uri
074 *
075 * @throws \InvalidArgumentException
076 */
077 protected function parseUri($uri)
078 {
079 if (false === ($uriParts = parse_url($uri))) {
080 // congratulations if you've managed to get parse_url to fail,
081 // it seems to always return some semblance of a parsed url no matter what
082 throw new InvalidArgumentException("Invalid URI: $uri");
083 }
084
085 if (!isset($uriParts['scheme'])) {
086 throw new InvalidArgumentException('Invalid URI: http|https scheme required');
087 }
088
089 $this->scheme = $uriParts['scheme'];
090 $this->host = $uriParts['host'];
091
092 if (isset($uriParts['port'])) {
093 $this->port = $uriParts['port'];
094 $this->explicitPortSpecified = true;
095 } else {
096 $this->port = strcmp('https', $uriParts['scheme']) ? 80 : 443;
097 $this->explicitPortSpecified = false;
098 }
099
100 if (isset($uriParts['path'])) {
101 $this->path = $uriParts['path'];
102 if ('/' === $uriParts['path']) {
103 $this->explicitTrailingHostSlash = true;
104 }
105 } else {
106 $this->path = '/';
107 }
108
109 $this->query = isset($uriParts['query']) ? $uriParts['query'] : '';
110 $this->fragment = isset($uriParts['fragment']) ? $uriParts['fragment'] : '';
111
112 $userInfo = '';
113 if (!empty($uriParts['user'])) {
114 $userInfo .= $uriParts['user'];
115 }
116 if ($userInfo && !empty($uriParts['pass'])) {
117 $userInfo .= ':' . $uriParts['pass'];
118 }
119
120 $this->setUserInfo($userInfo);
121 }
122
123 /**
124 * @param string $rawUserInfo
125 *
126 * @return string
127 */
128 protected function protectUserInfo($rawUserInfo)
129 {
130 $colonPos = strpos($rawUserInfo, ':');
131
132 // rfc3986-3.2.1 | http://tools.ietf.org/html/rfc3986#section-3.2
133 // "Applications should not render as clear text any data
134 // after the first colon (":") character found within a userinfo
135 // subcomponent unless the data after the colon is the empty string
136 // (indicating no password)"
137 if ($colonPos !== false && strlen($rawUserInfo)-1 > $colonPos) {
138 return substr($rawUserInfo, 0, $colonPos) . ':********';
139 } else {
140 return $rawUserInfo;
141 }
142 }
143
144 /**
145 * @return string
146 */
147 public function getScheme()
148 {
149 return $this->scheme;
150 }
151
152 /**
153 * @return string
154 */
155 public function getUserInfo()
156 {
157 return $this->userInfo;
158 }
159
160 /**
161 * @return string
162 */
163 public function getRawUserInfo()
164 {
165 return $this->rawUserInfo;
166 }
167
168 /**
169 * @return string
170 */
171 public function getHost()
172 {
173 return $this->host;
174 }
175
176 /**
177 * @return int
178 */
179 public function getPort()
180 {
181 return $this->port;
182 }
183
184 /**
185 * @return string
186 */
187 public function getPath()
188 {
189 return $this->path;
190 }
191
192 /**
193 * @return string
194 */
195 public function getQuery()
196 {
197 return $this->query;
198 }
199
200 /**
201 * @return string
202 */
203 public function getFragment()
204 {
205 return $this->fragment;
206 }
207
208 /**
209 * Uses protected user info by default as per rfc3986-3.2.1
210 * Uri::getRawAuthority() is available if plain-text password information is desirable.
211 *
212 * @return string
213 */
214 public function getAuthority()
215 {
216 $authority = $this->userInfo ? $this->userInfo.'@' : '';
217 $authority .= $this->host;
218
219 if ($this->explicitPortSpecified) {
220 $authority .= ":{$this->port}";
221 }
222
223 return $authority;
224 }
225
226 /**
227 * @return string
228 */
229 public function getRawAuthority()
230 {
231 $authority = $this->rawUserInfo ? $this->rawUserInfo.'@' : '';
232 $authority .= $this->host;
233
234 if ($this->explicitPortSpecified) {
235 $authority .= ":{$this->port}";
236 }
237
238 return $authority;
239 }
240
241 /**
242 * @return string
243 */
244 public function getAbsoluteUri()
245 {
246 $uri = $this->scheme . '://' . $this->getRawAuthority();
247
248 if ('/' === $this->path) {
249 $uri .= $this->explicitTrailingHostSlash ? '/' : '';
250 } else {
251 $uri .= $this->path;
252 }
253
254 if (!empty($this->query)) {
255 $uri .= "?{$this->query}";
256 }
257
258 if (!empty($this->fragment)) {
259 $uri .= "#{$this->fragment}";
260 }
261
262 return $uri;
263 }
264
265 /**
266 * @return string
267 */
268 public function getRelativeUri()
269 {
270 $uri = '';
271
272 if ('/' === $this->path) {
273 $uri .= $this->explicitTrailingHostSlash ? '/' : '';
274 } else {
275 $uri .= $this->path;
276 }
277
278 return $uri;
279 }
280
281 /**
282 * Uses protected user info by default as per rfc3986-3.2.1
283 * Uri::getAbsoluteUri() is available if plain-text password information is desirable.
284 *
285 * @return string
286 */
287 public function __toString()
288 {
289 $uri = $this->scheme . '://' . $this->getAuthority();
290
291 if ('/' === $this->path) {
292 $uri .= $this->explicitTrailingHostSlash ? '/' : '';
293 } else {
294 $uri .= $this->path;
295 }
296
297 if (!empty($this->query)) {
298 $uri .= "?{$this->query}";
299 }
300
301 if (!empty($this->fragment)) {
302 $uri .= "#{$this->fragment}";
303 }
304
305 return $uri;
306 }
307
308 /**
309 * @param $path
310 */
311 public function setPath($path)
312 {
313 if (empty($path)) {
314 $this->path = '/';
315 $this->explicitTrailingHostSlash = false;
316 } else {
317 $this->path = $path;
318 if ('/' === $this->path) {
319 $this->explicitTrailingHostSlash = true;
320 }
321 }
322 }
323
324 /**
325 * @param string $query
326 */
327 public function setQuery($query)
328 {
329 $this->query = $query;
330 }
331
332 /**
333 * @param string $var
334 * @param string $val
335 */
336 public function addToQuery($var, $val)
337 {
338 if (strlen($this->query) > 0) {
339 $this->query .= '&';
340 }
341 $this->query .= http_build_query(array($var => $val), '', '&');
342 }
343
344 /**
345 * @param string $fragment
346 */
347 public function setFragment($fragment)
348 {
349 $this->fragment = $fragment;
350 }
351
352 /**
353 * @param string $scheme
354 */
355 public function setScheme($scheme)
356 {
357 $this->scheme = $scheme;
358 }
359
360
361 /**
362 * @param string $userInfo
363 */
364 public function setUserInfo($userInfo)
365 {
366 $this->userInfo = $userInfo ? $this->protectUserInfo($userInfo) : '';
367 $this->rawUserInfo = $userInfo;
368 }
369
370
371 /**
372 * @param int $port
373 */
374 public function setPort($port)
375 {
376 $this->port = intval($port);
377
378 if (('https' === $this->scheme && $this->port === 443) || ('http' === $this->scheme && $this->port === 80)) {
379 $this->explicitPortSpecified = false;
380 } else {
381 $this->explicitPortSpecified = true;
382 }
383 }
384
385 /**
386 * @param string $host
387 */
388 public function setHost($host)
389 {
390 $this->host = $host;
391 }
392
393 /**
394 * @return bool
395 */
396 public function hasExplicitTrailingHostSlash()
397 {
398 return $this->explicitTrailingHostSlash;
399 }
400
401 /**
402 * @return bool
403 */
404 public function hasExplicitPortSpecified()
405 {
406 return $this->explicitPortSpecified;
407 }
408 }
409