Passed
Push — master ( 3a5683...386b65 )
by Terry
01:50
created

src/Psr17/UriFactory.php (1 issue)

Severity
1
<?php
2
/*
3
 * This file is part of the Shieldon package.
4
 *
5
 * (c) Terry L. <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
declare(strict_types=1);
12
13
namespace Shieldon\Psr17;
14
15
use Psr\Http\Message\UriFactoryInterface;
16
use Psr\Http\Message\UriInterface;
17
use Shieldon\Psr7\Uri;
18
19
/**
20
 * PSR-17 Uri Factory
21
 */
22
class UriFactory implements UriFactoryInterface
23
{
24
    /**
25
     * {@inheritdoc}
26
     */
27
    public function createUri(string $uri = '') : UriInterface
28
    {
29
        return new Uri($uri);
30
    }
31
32
    /*
33
    |--------------------------------------------------------------------------
34
    | Non PSR-7 Methods.
35
    |--------------------------------------------------------------------------
36
    */
37
38
    /**
39
     * Create a UriInterface instance from global variable.
40
     *
41
     * @return UriInterface
42
     */
43
    public static function fromGlobal(): UriInterface
44
    {
45
        $server = $_SERVER ?? [];
46
47
        $uri = '';
0 ignored issues
show
The assignment to $uri is dead and can be removed.
Loading history...
48
        $user = '';
49
        $host = '';
50
        $pass = '';
51
        $path = '';
52
        $port = '';
53
        $query = '';
54
        $scheme = '';
55
56
        $uriComponents = [
57
            'user' => 'PHP_AUTH_USER',
58
            'host' => 'HTTP_HOST',
59
            'pass' => 'PHP_AUTH_PW',
60
            'path' => 'REQUEST_URI',
61
            'port' => 'SERVER_PORT',
62
            'query' => 'QUERY_STRING',
63
            'scheme' => 'REQUEST_SCHEME',
64
        ];
65
66
        foreach ($uriComponents as $key => $value) {
67
            ${$key} = $server[$value] ?? '';
68
        }
69
70
        $userInfo = $user ? $user . ($pass ? ":{$pass}" : '') : '';
71
72
        $authority = ($userInfo ? "{$userInfo}@": '') 
73
            . $host
74
            . ($port ? ":{$port}" : '');
75
76
        $uri = ($scheme ? "{$scheme}:" : '')
77
            . ($authority ? "//{$authority}" : '')
78
            . '/'
79
            . ltrim($path, '/')
80
            . ($query ? "?{$query}" : '');
81
82
        return new Uri($uri);
83
    }
84
}
85