Completed
Push — v5.1 ( ad5c2c...2ab2d0 )
by Georges
03:22
created

Driver::driverRead()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 2
eloc 5
c 1
b 0
f 1
nc 2
nop 1
dl 0
loc 9
rs 9.6666
1
<?php
2
/**
3
 *
4
 * This file is part of phpFastCache.
5
 *
6
 * @license MIT License (MIT)
7
 *
8
 * For full copyright and license information, please see the docs/CREDITS.txt file.
9
 *
10
 * @author Lucas Brucksch <[email protected]>
11
 *
12
 */
13
14
namespace phpFastCache\Drivers\Zenddisk;
15
16
use phpFastCache\Core\DriverAbstract;
17
use phpFastCache\Core\StandardPsr6StructureTrait;
18
use phpFastCache\Entities\driverStatistic;
19
use phpFastCache\Exceptions\phpFastCacheDriverCheckException;
20
use phpFastCache\Exceptions\phpFastCacheDriverException;
21
use Psr\Cache\CacheItemInterface;
22
23
/**
24
 * Class Driver (zend disk cache)
25
 * Requires Zend Data Cache Functions from ZendServer
26
 * @package phpFastCache\Drivers
27
 */
28
class Driver extends DriverAbstract
29
{
30
    /**
31
     * Driver constructor.
32
     * @param array $config
33
     * @throws phpFastCacheDriverException
34
     */
35
    public function __construct(array $config = [])
36
    {
37
        $this->setup($config);
38
39
        if (!$this->driverCheck()) {
40
            throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName()));
41
        }
42
    }
43
44
    /**
45
     * @return bool
46
     */
47
    public function driverCheck()
48
    {
49
        if (extension_loaded('Zend Data Cache') && function_exists('zend_disk_cache_store')) {
50
            return true;
51
        } else {
52
            return false;
53
        }
54
    }
55
56
    /**
57
     * @param \Psr\Cache\CacheItemInterface $item
58
     * @return mixed
59
     * @throws \InvalidArgumentException
60
     */
61
    protected function driverWrite(CacheItemInterface $item)
62
    {
63
        /**
64
         * Check for Cross-Driver type confusion
65
         */
66
        if ($item instanceof Item) {
67
            $ttl = $item->getExpirationDate()->getTimestamp() - time();
68
69
            return zend_disk_cache_store($item->getKey(), $this->driverPreWrap($item), ($ttl > 0 ? $ttl : 0));
70
        } else {
71
            throw new \InvalidArgumentException('Cross-Driver type confusion detected');
72
        }
73
    }
74
75
    /**
76
     * @param \Psr\Cache\CacheItemInterface $item
77
     * @return mixed
78
     */
79
    protected function driverRead(CacheItemInterface $item)
80
    {
81
        $data = zend_disk_cache_fetch($item->getKey());
82
        if ($data === false) {
83
            return null;
84
        }
85
86
        return $data;
87
    }
88
89
    /**
90
     * @param \Psr\Cache\CacheItemInterface $item
91
     * @return bool
92
     * @throws \InvalidArgumentException
93
     */
94
    protected function driverDelete(CacheItemInterface $item)
95
    {
96
        /**
97
         * Check for Cross-Driver type confusion
98
         */
99
        if ($item instanceof Item) {
100
            return zend_disk_cache_delete($item->getKey());
101
        } else {
102
            throw new \InvalidArgumentException('Cross-Driver type confusion detected');
103
        }
104
    }
105
106
    /**
107
     * @return bool
108
     */
109
    protected function driverClear()
110
    {
111
        return @zend_disk_cache_clear();
112
    }
113
114
    /**
115
     * @return bool
116
     */
117
    protected function driverConnect()
118
    {
119
        return true;
120
    }
121
122
    /********************
123
     *
124
     * PSR-6 Extended Methods
125
     *
126
     *******************/
127
128
    /**
129
     * @return driverStatistic
130
     */
131
    public function getStats()
132
    {
133
        $stat = new driverStatistic();
134
        $stat->setInfo('[ZendDisk] A void info string')
135
            ->setSize(0)
136
            ->setData(implode(', ', array_keys($this->itemInstances)))
137
            ->setRawData(false);
138
139
        return $stat;
140
    }
141
}