@@ 22-207 (lines=186) @@ | ||
19 | * THE SOFTWARE. |
|
20 | */ |
|
21 | ||
22 | class Apc extends AbstractDriver { |
|
23 | ||
24 | const DRIVER_NAME = "apc"; |
|
25 | ||
26 | /** |
|
27 | * {@inheritdoc} |
|
28 | */ |
|
29 | public function __construct(array $configuration = []) { |
|
30 | ||
31 | if ( extension_loaded('apc') === false ) throw new Exception("ext-apc not available"); |
|
32 | ||
33 | // In cli, apcu SHOULD NOT use the request time for cache retrieve/invalidation. |
|
34 | // This is because in cli the request time is allways the same. |
|
35 | if ( php_sapi_name() === 'cli' ) { |
|
36 | ini_set('apc.use_request_time', 0); |
|
37 | } |
|
38 | ||
39 | } |
|
40 | ||
41 | /** |
|
42 | * {@inheritdoc} |
|
43 | */ |
|
44 | public function test() { |
|
45 | ||
46 | return (bool) ini_get('apc.enabled'); |
|
47 | ||
48 | } |
|
49 | ||
50 | /** |
|
51 | * {@inheritdoc} |
|
52 | */ |
|
53 | public function get($key, $namespace) { |
|
54 | ||
55 | $scope = $this->getNamespaceKey($namespace); |
|
56 | ||
57 | if ( $scope === false ) return null; |
|
58 | ||
59 | $shadowName = "$scope-$key"; |
|
60 | ||
61 | $item = apc_fetch($shadowName, $success); |
|
62 | ||
63 | return $success === false ? null : $item; |
|
64 | ||
65 | } |
|
66 | ||
67 | /** |
|
68 | * {@inheritdoc} |
|
69 | */ |
|
70 | public function set($key, $namespace, $value, $ttl = null) { |
|
71 | ||
72 | if ( $ttl == null ) $ttl = 0; |
|
73 | ||
74 | $scope = $this->getNamespaceKey($namespace); |
|
75 | ||
76 | if ( $scope === false ) $scope = $this->setNamespaceKey($namespace); |
|
77 | ||
78 | if ( $scope === false ) return false; |
|
79 | ||
80 | $shadowName = "$scope-$key"; |
|
81 | ||
82 | return apc_store($shadowName, $value, $ttl); |
|
83 | ||
84 | } |
|
85 | ||
86 | /** |
|
87 | * {@inheritdoc} |
|
88 | */ |
|
89 | public function delete($key, $namespace) { |
|
90 | ||
91 | $scope = $this->getNamespaceKey($namespace); |
|
92 | ||
93 | if ( $scope === false ) return false; |
|
94 | ||
95 | $shadowName = "$scope-$key"; |
|
96 | ||
97 | return apc_delete($shadowName); |
|
98 | ||
99 | } |
|
100 | ||
101 | /** |
|
102 | * {@inheritdoc} |
|
103 | */ |
|
104 | public function clear($namespace = null) { |
|
105 | ||
106 | if ( $namespace == null ) { |
|
107 | ||
108 | return apc_clear_cache("user"); |
|
109 | ||
110 | } else { |
|
111 | ||
112 | $scope = $this->getNamespaceKey($namespace); |
|
113 | ||
114 | if ( $scope === false ) return false; |
|
115 | ||
116 | return apc_delete($namespace); |
|
117 | ||
118 | } |
|
119 | ||
120 | } |
|
121 | ||
122 | /** |
|
123 | * {@inheritdoc} |
|
124 | */ |
|
125 | public function getMultiple(array $keys, $namespace) { |
|
126 | ||
127 | $keypad = array_combine($keys, array_fill(0, count($keys), null)); |
|
128 | ||
129 | $scope = $this->getNamespaceKey($namespace); |
|
130 | ||
131 | if ( $scope === false ) return $keypad; |
|
132 | ||
133 | $keyscope = array_map(function($key) use($scope) { |
|
134 | return "$scope-$key"; |
|
135 | }, $keys); |
|
136 | ||
137 | $data = apc_fetch($keyscope, $success); |
|
138 | ||
139 | $return = []; |
|
140 | ||
141 | foreach ( $data as $scoped_key => $value ) { |
|
142 | $key = substr($scoped_key, strlen("$scope-")); |
|
143 | $return[$key] = $value; |
|
144 | } |
|
145 | ||
146 | return array_replace($keypad, $return); |
|
147 | ||
148 | } |
|
149 | ||
150 | /** |
|
151 | * {@inheritdoc} |
|
152 | */ |
|
153 | public function setMultiple(array $key_values, $namespace, $ttl = null) { |
|
154 | ||
155 | if ( $ttl == null ) $ttl = 0; |
|
156 | ||
157 | $scope = $this->getNamespaceKey($namespace); |
|
158 | ||
159 | if ( $scope === false ) $scope = $this->setNamespaceKey($namespace); |
|
160 | ||
161 | if ( $scope === false ) return false; |
|
162 | ||
163 | $shadowNames = []; |
|
164 | ||
165 | foreach ( $key_values as $key => $value ) { |
|
166 | $shadowNames["$scope-$key"] = $value; |
|
167 | } |
|
168 | ||
169 | $data = apc_store($shadowNames, null, $ttl); |
|
170 | ||
171 | return empty($data) ? true : false; |
|
172 | ||
173 | } |
|
174 | ||
175 | /** |
|
176 | * {@inheritdoc} |
|
177 | */ |
|
178 | public function deleteMultiple(array $keys, $namespace) { |
|
179 | ||
180 | $scope = $this->getNamespaceKey($namespace); |
|
181 | ||
182 | if ( $scope === false ) return false; |
|
183 | ||
184 | $shadowNames = array_map(function($key) use($scope) { |
|
185 | return "$scope-$key"; |
|
186 | }, $keys); |
|
187 | ||
188 | $delete = apc_delete($shadowNames); |
|
189 | ||
190 | return empty($delete) ? true : false; |
|
191 | ||
192 | } |
|
193 | ||
194 | /** |
|
195 | * {@inheritdoc} |
|
196 | */ |
|
197 | public function has($key, $namespace) { |
|
198 | ||
199 | $scope = $this->getNamespaceKey($namespace); |
|
200 | ||
201 | if ( $scope === false ) return false; |
|
202 | ||
203 | return apc_exists("$scope-$key"); |
|
204 | ||
205 | } |
|
206 | ||
207 | /** |
|
208 | * {@inheritdoc} |
|
209 | */ |
|
210 | public function stats() { |
@@ 22-207 (lines=186) @@ | ||
19 | * THE SOFTWARE. |
|
20 | */ |
|
21 | ||
22 | class Apcu extends AbstractDriver { |
|
23 | ||
24 | const DRIVER_NAME = "apcu"; |
|
25 | ||
26 | /** |
|
27 | * {@inheritdoc} |
|
28 | */ |
|
29 | public function __construct(array $configuration = []) { |
|
30 | ||
31 | if ( extension_loaded('apcu') === false ) throw new Exception("ext-apcu not available"); |
|
32 | ||
33 | // In cli, apcu SHOULD NOT use the request time for cache retrieve/invalidation. |
|
34 | // This is because in cli the request time is allways the same. |
|
35 | if ( php_sapi_name() === 'cli' ) { |
|
36 | ini_set('apc.use_request_time', 0); |
|
37 | } |
|
38 | ||
39 | } |
|
40 | ||
41 | /** |
|
42 | * {@inheritdoc} |
|
43 | */ |
|
44 | public function test() { |
|
45 | ||
46 | return (bool) ini_get('apc.enabled'); |
|
47 | ||
48 | } |
|
49 | ||
50 | /** |
|
51 | * {@inheritdoc} |
|
52 | */ |
|
53 | public function get($key, $namespace) { |
|
54 | ||
55 | $scope = $this->getNamespaceKey($namespace); |
|
56 | ||
57 | if ( $scope === false ) return null; |
|
58 | ||
59 | $shadowName = "$scope-$key"; |
|
60 | ||
61 | $item = apcu_fetch($shadowName, $success); |
|
62 | ||
63 | return $success === false ? null : $item; |
|
64 | ||
65 | } |
|
66 | ||
67 | /** |
|
68 | * {@inheritdoc} |
|
69 | */ |
|
70 | public function set($key, $namespace, $value, $ttl = null) { |
|
71 | ||
72 | if ( $ttl == null ) $ttl = 0; |
|
73 | ||
74 | $scope = $this->getNamespaceKey($namespace); |
|
75 | ||
76 | if ( $scope === false ) $scope = $this->setNamespaceKey($namespace); |
|
77 | ||
78 | if ( $scope === false ) return false; |
|
79 | ||
80 | $shadowName = "$scope-$key"; |
|
81 | ||
82 | return apcu_store($shadowName, $value, $ttl); |
|
83 | ||
84 | } |
|
85 | ||
86 | /** |
|
87 | * {@inheritdoc} |
|
88 | */ |
|
89 | public function delete($key, $namespace) { |
|
90 | ||
91 | $scope = $this->getNamespaceKey($namespace); |
|
92 | ||
93 | if ( $scope === false ) return false; |
|
94 | ||
95 | $shadowName = "$scope-$key"; |
|
96 | ||
97 | return apcu_delete($shadowName); |
|
98 | ||
99 | } |
|
100 | ||
101 | /** |
|
102 | * {@inheritdoc} |
|
103 | */ |
|
104 | public function clear($namespace = null) { |
|
105 | ||
106 | if ( $namespace == null ) { |
|
107 | ||
108 | return apcu_clear_cache(); |
|
109 | ||
110 | } else { |
|
111 | ||
112 | $scope = $this->getNamespaceKey($namespace); |
|
113 | ||
114 | if ( $scope === false ) return false; |
|
115 | ||
116 | return apcu_delete($namespace); |
|
117 | ||
118 | } |
|
119 | ||
120 | } |
|
121 | ||
122 | /** |
|
123 | * {@inheritdoc} |
|
124 | */ |
|
125 | public function getMultiple(array $keys, $namespace) { |
|
126 | ||
127 | $keypad = array_combine($keys, array_fill(0, count($keys), null)); |
|
128 | ||
129 | $scope = $this->getNamespaceKey($namespace); |
|
130 | ||
131 | if ( $scope === false ) return $keypad; |
|
132 | ||
133 | $keyscope = array_map(function($key) use($scope) { |
|
134 | return "$scope-$key"; |
|
135 | }, $keys); |
|
136 | ||
137 | $data = apcu_fetch($keyscope, $success); |
|
138 | ||
139 | $return = []; |
|
140 | ||
141 | foreach ( $data as $scoped_key => $value ) { |
|
142 | $key = substr($scoped_key, strlen("$scope-")); |
|
143 | $return[$key] = $value; |
|
144 | } |
|
145 | ||
146 | return array_replace($keypad, $return); |
|
147 | ||
148 | } |
|
149 | ||
150 | /** |
|
151 | * {@inheritdoc} |
|
152 | */ |
|
153 | public function setMultiple(array $key_values, $namespace, $ttl = null) { |
|
154 | ||
155 | if ( $ttl == null ) $ttl = 0; |
|
156 | ||
157 | $scope = $this->getNamespaceKey($namespace); |
|
158 | ||
159 | if ( $scope === false ) $scope = $this->setNamespaceKey($namespace); |
|
160 | ||
161 | if ( $scope === false ) return false; |
|
162 | ||
163 | $shadowNames = []; |
|
164 | ||
165 | foreach ( $key_values as $key => $value ) { |
|
166 | $shadowNames["$scope-$key"] = $value; |
|
167 | } |
|
168 | ||
169 | $data = apcu_store($shadowNames, null, $ttl); |
|
170 | ||
171 | return empty($data) ? true : false; |
|
172 | ||
173 | } |
|
174 | ||
175 | /** |
|
176 | * {@inheritdoc} |
|
177 | */ |
|
178 | public function deleteMultiple(array $keys, $namespace) { |
|
179 | ||
180 | $scope = $this->getNamespaceKey($namespace); |
|
181 | ||
182 | if ( $scope === false ) return false; |
|
183 | ||
184 | $shadowNames = array_map(function($key) use($scope) { |
|
185 | return "$scope-$key"; |
|
186 | }, $keys); |
|
187 | ||
188 | $delete = apcu_delete($shadowNames); |
|
189 | ||
190 | return empty($delete) ? true : false; |
|
191 | ||
192 | } |
|
193 | ||
194 | /** |
|
195 | * {@inheritdoc} |
|
196 | */ |
|
197 | public function has($key, $namespace) { |
|
198 | ||
199 | $scope = $this->getNamespaceKey($namespace); |
|
200 | ||
201 | if ( $scope === false ) return false; |
|
202 | ||
203 | return apcu_exists("$scope-$key"); |
|
204 | ||
205 | } |
|
206 | ||
207 | /** |
|
208 | * {@inheritdoc} |
|
209 | */ |
|
210 | public function stats() { |