Projet

Général

Profil

Paste
Télécharger (3,58 ko) Statistiques
| Branche: | Révision:

root / drupal7 / misc / typo3 / phar-stream-wrapper / src / Phar / Manifest.php @ fbb66ca6

1
<?php
2
namespace TYPO3\PharStreamWrapper\Phar;
3

    
4
/*
5
 * This file is part of the TYPO3 project.
6
 *
7
 * It is free software; you can redistribute it and/or modify it under the terms
8
 * of the MIT License (MIT). For the full copyright and license information,
9
 * please read the LICENSE file that was distributed with this source code.
10
 *
11
 * The TYPO3 project - inspiring people to share!
12
 */
13

    
14
use Brumann\Polyfill\Unserialize;
15

    
16
class Manifest
17
{
18
    /**
19
     * @param string $content
20
     * @return self
21
     * @see http://php.net/manual/en/phar.fileformat.phar.php
22
     */
23
    public static function fromContent($content)
24
    {
25
        $target = new static();
26
        $target->manifestLength = Reader::resolveFourByteLittleEndian($content, 0);
27
        $target->amountOfFiles = Reader::resolveFourByteLittleEndian($content, 4);
28
        $target->flags = Reader::resolveFourByteLittleEndian($content, 10);
29
        $target->aliasLength = Reader::resolveFourByteLittleEndian($content, 14);
30
        $target->alias = substr($content, 18, $target->aliasLength);
31
        $target->metaDataLength = Reader::resolveFourByteLittleEndian($content, 18 + $target->aliasLength);
32
        $target->metaData = substr($content, 22 + $target->aliasLength, $target->metaDataLength);
33

    
34
        $apiVersionNibbles = Reader::resolveTwoByteBigEndian($content, 8);
35
        $target->apiVersion = implode('.', array(
36
            ($apiVersionNibbles & 0xf000) >> 12,
37
            ($apiVersionNibbles & 0x0f00) >> 8,
38
            ($apiVersionNibbles & 0x00f0) >> 4,
39
        ));
40

    
41
        return $target;
42
    }
43

    
44
    /**
45
     * @var int
46
     */
47
    private $manifestLength;
48

    
49
    /**
50
     * @var int
51
     */
52
    private $amountOfFiles;
53

    
54
    /**
55
     * @var string
56
     */
57
    private $apiVersion;
58

    
59
    /**
60
     * @var int
61
     */
62
    private $flags;
63

    
64
    /**
65
     * @var int
66
     */
67
    private $aliasLength;
68

    
69
    /**
70
     * @var string
71
     */
72
    private $alias;
73

    
74
    /**
75
     * @var int
76
     */
77
    private $metaDataLength;
78

    
79
    /**
80
     * @var string
81
     */
82
    private $metaData;
83

    
84
    /**
85
     * Avoid direct instantiation.
86
     */
87
    private function __construct()
88
    {
89
    }
90

    
91
    /**
92
     * @return int
93
     */
94
    public function getManifestLength()
95
    {
96
        return $this->manifestLength;
97
    }
98

    
99
    /**
100
     * @return int
101
     */
102
    public function getAmountOfFiles()
103
    {
104
        return $this->amountOfFiles;
105
    }
106

    
107
    /**
108
     * @return string
109
     */
110
    public function getApiVersion()
111
    {
112
        return $this->apiVersion;
113
    }
114

    
115
    /**
116
     * @return int
117
     */
118
    public function getFlags()
119
    {
120
        return $this->flags;
121
    }
122

    
123
    /**
124
     * @return int
125
     */
126
    public function getAliasLength()
127
    {
128
        return $this->aliasLength;
129
    }
130

    
131
    /**
132
     * @return string
133
     */
134
    public function getAlias()
135
    {
136
        return $this->alias;
137
    }
138

    
139
    /**
140
     * @return int
141
     */
142
    public function getMetaDataLength()
143
    {
144
        return $this->metaDataLength;
145
    }
146

    
147
    /**
148
     * @return string
149
     */
150
    public function getMetaData()
151
    {
152
        return $this->metaData;
153
    }
154

    
155
    /**
156
     * @return mixed|null
157
     */
158
    public function deserializeMetaData()
159
    {
160
        if (empty($this->metaData)) {
161
            return null;
162
        }
163

    
164
        $result = Unserialize::unserialize($this->metaData, array('allowed_classes' => false));
165

    
166
        $serialized = json_encode($result);
167
        if (strpos($serialized, '__PHP_Incomplete_Class_Name') !== false) {
168
            throw new DeserializationException(
169
                'Meta-data contains serialized object',
170
                1539623382
171
            );
172
        }
173

    
174
        return $result;
175
    }
176
}