Completed
Pull Request — master (#220)
by Luís
03:30
created

FilesystemCache::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 3
crap 1
1
<?php
2
/*
3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14
 *
15
 * This software consists of voluntary contributions made by many individuals
16
 * and is licensed under the MIT license. For more information, see
17
 * <http://www.doctrine-project.org>.
18
 */
19
20
namespace Doctrine\Common\Cache;
21
22
/**
23
 * Filesystem cache driver.
24
 *
25
 * @since  2.3
26
 * @author Fabio B. Silva <[email protected]>
27
 */
28
class FilesystemCache extends FileCache
29
{
30
    const EXTENSION = '.doctrinecache.data';
31
32
    /**
33
     * {@inheritdoc}
34
     */
35 82
    public function __construct($directory, $extension = self::EXTENSION, $umask = 0002)
36
    {
37 82
        parent::__construct($directory, $extension, $umask);
38 82
    }
39
40
    /**
41
     * {@inheritdoc}
42
     */
43 80
    protected function doFetch($id)
44
    {
45 80
        $data     = '';
46 80
        $lifetime = -1;
47 80
        $filename = $this->getFilename($id);
48
49 80
        if ( ! is_file($filename)) {
50 80
            return false;
51
        }
52
53 67
        $resource = fopen($filename, "r");
54
55 67
        if (false !== ($line = fgets($resource))) {
56 67
            $lifetime = (int) $line;
57
        }
58
59 67
        if ($lifetime !== 0 && $lifetime < time()) {
60
            fclose($resource);
61
62
            return false;
63
        }
64
65 67
        while (false !== ($line = fgets($resource))) {
66 67
            $data .= $line;
67
        }
68
69 67
        fclose($resource);
70
71 67
        return unserialize($data);
72
    }
73
74
    /**
75
     * {@inheritdoc}
76
     */
77 71
    protected function doContains($id)
78
    {
79 71
        $lifetime = -1;
80 71
        $filename = $this->getFilename($id);
81
82 71
        if ( ! is_file($filename)) {
83 51
            return false;
84
        }
85
86 66
        $resource = fopen($filename, "r");
87
88 66
        if (false !== ($line = fgets($resource))) {
89 66
            $lifetime = (int) $line;
90
        }
91
92 66
        fclose($resource);
93
94 66
        return $lifetime === 0 || $lifetime > time();
95
    }
96
97
    /**
98
     * {@inheritdoc}
99
     */
100 78
    protected function doSave($id, $data, $lifeTime = 0)
101
    {
102 78
        if ($lifeTime > 0) {
103 3
            $lifeTime = time() + $lifeTime;
104
        }
105
106 78
        $data      = serialize($data);
107 78
        $filename  = $this->getFilename($id);
108
109 78
        return $this->writeFile($filename, $lifeTime . PHP_EOL . $data);
110
    }
111
}
112