Passed
Branch sudav3 (acb061)
by 世昌
02:16
created

UriParser::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 7
nc 2
nop 2
dl 0
loc 10
rs 10
c 0
b 0
f 0
1
<?php
2
namespace suda\framework\server\request;
3
4
/**
5
 * HTTP URI处理
6
 */
7
class UriParser
8
{
9
    /**
10
     * 入口文件
11
     *
12
     * @var string
13
     */
14
    protected $indexFile;
15
16
    /**
17
     * 文本根目录
18
     *
19
     * @var string
20
     */
21
    protected $documentRoot;
22
23
    /**
24
     * URI
25
     *
26
     * @var string
27
     */
28
    protected $uri;
29
30
    /**
31
     * 请求参数
32
     *
33
     * @var array
34
     */
35
    protected $query;
36
    
37
    public function __construct(string $uri, string $indexFile)
38
    {
39
        $this->indexFile = $indexFile;
40
        $url = $this->clearIndex($uri, $indexFile);
41
        $query = parse_url($url, PHP_URL_QUERY);
42
        if (strlen($query) > 0) {
43
            parse_str($query, $this->query);
44
        }
45
        $url = parse_url($url, PHP_URL_PATH);
46
        $this->uri = '/' . trim($url, '\/');
47
    }
48
49
    public function getQuery():array
50
    {
51
        return $this->query;
52
    }
53
54
    public function getUri():string
55
    {
56
        return $this->uri;
57
    }
58
59
    private function clearIndex(string $url, string $indexFile)
60
    {
61
        if (\strpos($url, '/?/') === 0) {
62
            $url = substr($url, 2);
63
        }
64
        if (\strpos($url, $indexFile) === 0) {
65
            // for /index.php/
66
            $url = \substr($url, strlen($indexFile));// for /index.php?/
67
            if (\strpos($url, '?/') === 0) {
68
                $url = ltrim($url, '?');
69
            }
70
            // for /index.php
71
            elseif (\strpos($url, '/') !== 0) {
72
                $url = '/'.$url;
73
            }
74
        }
75
        return $url;
76
    }
77
}
78