diff options
Diffstat (limited to 'inc/3rdparty/libraries/Zend/Cache/Backend.php')
-rw-r--r-- | inc/3rdparty/libraries/Zend/Cache/Backend.php | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/inc/3rdparty/libraries/Zend/Cache/Backend.php b/inc/3rdparty/libraries/Zend/Cache/Backend.php new file mode 100644 index 00000000..803fd446 --- /dev/null +++ b/inc/3rdparty/libraries/Zend/Cache/Backend.php | |||
@@ -0,0 +1,290 @@ | |||
1 | <?php | ||
2 | /** | ||
3 | * Zend Framework | ||
4 | * | ||
5 | * LICENSE | ||
6 | * | ||
7 | * This source file is subject to the new BSD license that is bundled | ||
8 | * with this package in the file LICENSE.txt. | ||
9 | * It is also available through the world-wide-web at this URL: | ||
10 | * http://framework.zend.com/license/new-bsd | ||
11 | * If you did not receive a copy of the license and are unable to | ||
12 | * obtain it through the world-wide-web, please send an email | ||
13 | * to license@zend.com so we can send you a copy immediately. | ||
14 | * | ||
15 | * @category Zend | ||
16 | * @package Zend_Cache | ||
17 | * @subpackage Zend_Cache_Backend | ||
18 | * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
19 | * @license http://framework.zend.com/license/new-bsd New BSD License | ||
20 | * @version $Id: Backend.php 24989 2012-06-21 07:24:13Z mabe $ | ||
21 | */ | ||
22 | |||
23 | |||
24 | /** | ||
25 | * @package Zend_Cache | ||
26 | * @subpackage Zend_Cache_Backend | ||
27 | * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
28 | * @license http://framework.zend.com/license/new-bsd New BSD License | ||
29 | */ | ||
30 | class Zend_Cache_Backend | ||
31 | { | ||
32 | /** | ||
33 | * Frontend or Core directives | ||
34 | * | ||
35 | * =====> (int) lifetime : | ||
36 | * - Cache lifetime (in seconds) | ||
37 | * - If null, the cache is valid forever | ||
38 | * | ||
39 | * =====> (int) logging : | ||
40 | * - if set to true, a logging is activated throw Zend_Log | ||
41 | * | ||
42 | * @var array directives | ||
43 | */ | ||
44 | protected $_directives = array( | ||
45 | 'lifetime' => 3600, | ||
46 | 'logging' => false, | ||
47 | 'logger' => null | ||
48 | ); | ||
49 | |||
50 | /** | ||
51 | * Available options | ||
52 | * | ||
53 | * @var array available options | ||
54 | */ | ||
55 | protected $_options = array(); | ||
56 | |||
57 | /** | ||
58 | * Constructor | ||
59 | * | ||
60 | * @param array $options Associative array of options | ||
61 | * @throws Zend_Cache_Exception | ||
62 | * @return void | ||
63 | */ | ||
64 | public function __construct(array $options = array()) | ||
65 | { | ||
66 | while (list($name, $value) = each($options)) { | ||
67 | $this->setOption($name, $value); | ||
68 | } | ||
69 | } | ||
70 | |||
71 | /** | ||
72 | * Set the frontend directives | ||
73 | * | ||
74 | * @param array $directives Assoc of directives | ||
75 | * @throws Zend_Cache_Exception | ||
76 | * @return void | ||
77 | */ | ||
78 | public function setDirectives($directives) | ||
79 | { | ||
80 | if (!is_array($directives)) Zend_Cache::throwException('Directives parameter must be an array'); | ||
81 | while (list($name, $value) = each($directives)) { | ||
82 | if (!is_string($name)) { | ||
83 | Zend_Cache::throwException("Incorrect option name : $name"); | ||
84 | } | ||
85 | $name = strtolower($name); | ||
86 | if (array_key_exists($name, $this->_directives)) { | ||
87 | $this->_directives[$name] = $value; | ||
88 | } | ||
89 | |||
90 | } | ||
91 | |||
92 | $this->_loggerSanity(); | ||
93 | } | ||
94 | |||
95 | /** | ||
96 | * Set an option | ||
97 | * | ||
98 | * @param string $name | ||
99 | * @param mixed $value | ||
100 | * @throws Zend_Cache_Exception | ||
101 | * @return void | ||
102 | */ | ||
103 | public function setOption($name, $value) | ||
104 | { | ||
105 | if (!is_string($name)) { | ||
106 | Zend_Cache::throwException("Incorrect option name : $name"); | ||
107 | } | ||
108 | $name = strtolower($name); | ||
109 | if (array_key_exists($name, $this->_options)) { | ||
110 | $this->_options[$name] = $value; | ||
111 | } | ||
112 | } | ||
113 | |||
114 | /** | ||
115 | * Returns an option | ||
116 | * | ||
117 | * @param string $name Optional, the options name to return | ||
118 | * @throws Zend_Cache_Exceptions | ||
119 | * @return mixed | ||
120 | */ | ||
121 | public function getOption($name) | ||
122 | { | ||
123 | $name = strtolower($name); | ||
124 | |||
125 | if (array_key_exists($name, $this->_options)) { | ||
126 | return $this->_options[$name]; | ||
127 | } | ||
128 | |||
129 | if (array_key_exists($name, $this->_directives)) { | ||
130 | return $this->_directives[$name]; | ||
131 | } | ||
132 | |||
133 | Zend_Cache::throwException("Incorrect option name : {$name}"); | ||
134 | } | ||
135 | |||
136 | /** | ||
137 | * Get the life time | ||
138 | * | ||
139 | * if $specificLifetime is not false, the given specific life time is used | ||
140 | * else, the global lifetime is used | ||
141 | * | ||
142 | * @param int $specificLifetime | ||
143 | * @return int Cache life time | ||
144 | */ | ||
145 | public function getLifetime($specificLifetime) | ||
146 | { | ||
147 | if ($specificLifetime === false) { | ||
148 | return $this->_directives['lifetime']; | ||
149 | } | ||
150 | return $specificLifetime; | ||
151 | } | ||
152 | |||
153 | /** | ||
154 | * Return true if the automatic cleaning is available for the backend | ||
155 | * | ||
156 | * DEPRECATED : use getCapabilities() instead | ||
157 | * | ||
158 | * @deprecated | ||
159 | * @return boolean | ||
160 | */ | ||
161 | public function isAutomaticCleaningAvailable() | ||
162 | { | ||
163 | return true; | ||
164 | } | ||
165 | |||
166 | /** | ||
167 | * Determine system TMP directory and detect if we have read access | ||
168 | * | ||
169 | * inspired from Zend_File_Transfer_Adapter_Abstract | ||
170 | * | ||
171 | * @return string | ||
172 | * @throws Zend_Cache_Exception if unable to determine directory | ||
173 | */ | ||
174 | public function getTmpDir() | ||
175 | { | ||
176 | $tmpdir = array(); | ||
177 | foreach (array($_ENV, $_SERVER) as $tab) { | ||
178 | foreach (array('TMPDIR', 'TEMP', 'TMP', 'windir', 'SystemRoot') as $key) { | ||
179 | if (isset($tab[$key]) && is_string($tab[$key])) { | ||
180 | if (($key == 'windir') or ($key == 'SystemRoot')) { | ||
181 | $dir = realpath($tab[$key] . '\\temp'); | ||
182 | } else { | ||
183 | $dir = realpath($tab[$key]); | ||
184 | } | ||
185 | if ($this->_isGoodTmpDir($dir)) { | ||
186 | return $dir; | ||
187 | } | ||
188 | } | ||
189 | } | ||
190 | } | ||
191 | $upload = ini_get('upload_tmp_dir'); | ||
192 | if ($upload) { | ||
193 | $dir = realpath($upload); | ||
194 | if ($this->_isGoodTmpDir($dir)) { | ||
195 | return $dir; | ||
196 | } | ||
197 | } | ||
198 | if (function_exists('sys_get_temp_dir')) { | ||
199 | $dir = sys_get_temp_dir(); | ||
200 | if ($this->_isGoodTmpDir($dir)) { | ||
201 | return $dir; | ||
202 | } | ||
203 | } | ||
204 | // Attemp to detect by creating a temporary file | ||
205 | $tempFile = tempnam(md5(uniqid(rand(), TRUE)), ''); | ||
206 | if ($tempFile) { | ||
207 | $dir = realpath(dirname($tempFile)); | ||
208 | unlink($tempFile); | ||
209 | if ($this->_isGoodTmpDir($dir)) { | ||
210 | return $dir; | ||
211 | } | ||
212 | } | ||
213 | if ($this->_isGoodTmpDir('/tmp')) { | ||
214 | return '/tmp'; | ||
215 | } | ||
216 | if ($this->_isGoodTmpDir('\\temp')) { | ||
217 | return '\\temp'; | ||
218 | } | ||
219 | Zend_Cache::throwException('Could not determine temp directory, please specify a cache_dir manually'); | ||
220 | } | ||
221 | |||
222 | /** | ||
223 | * Verify if the given temporary directory is readable and writable | ||
224 | * | ||
225 | * @param string $dir temporary directory | ||
226 | * @return boolean true if the directory is ok | ||
227 | */ | ||
228 | protected function _isGoodTmpDir($dir) | ||
229 | { | ||
230 | if (is_readable($dir)) { | ||
231 | if (is_writable($dir)) { | ||
232 | return true; | ||
233 | } | ||
234 | } | ||
235 | return false; | ||
236 | } | ||
237 | |||
238 | /** | ||
239 | * Make sure if we enable logging that the Zend_Log class | ||
240 | * is available. | ||
241 | * Create a default log object if none is set. | ||
242 | * | ||
243 | * @throws Zend_Cache_Exception | ||
244 | * @return void | ||
245 | */ | ||
246 | protected function _loggerSanity() | ||
247 | { | ||
248 | if (!isset($this->_directives['logging']) || !$this->_directives['logging']) { | ||
249 | return; | ||
250 | } | ||
251 | |||
252 | if (isset($this->_directives['logger'])) { | ||
253 | if ($this->_directives['logger'] instanceof Zend_Log) { | ||
254 | return; | ||
255 | } | ||
256 | Zend_Cache::throwException('Logger object is not an instance of Zend_Log class.'); | ||
257 | } | ||
258 | |||
259 | // Create a default logger to the standard output stream | ||
260 | require_once 'Zend/Log.php'; | ||
261 | require_once 'Zend/Log/Writer/Stream.php'; | ||
262 | require_once 'Zend/Log/Filter/Priority.php'; | ||
263 | $logger = new Zend_Log(new Zend_Log_Writer_Stream('php://output')); | ||
264 | $logger->addFilter(new Zend_Log_Filter_Priority(Zend_Log::WARN, '<=')); | ||
265 | $this->_directives['logger'] = $logger; | ||
266 | } | ||
267 | |||
268 | /** | ||
269 | * Log a message at the WARN (4) priority. | ||
270 | * | ||
271 | * @param string $message | ||
272 | * @throws Zend_Cache_Exception | ||
273 | * @return void | ||
274 | */ | ||
275 | protected function _log($message, $priority = 4) | ||
276 | { | ||
277 | if (!$this->_directives['logging']) { | ||
278 | return; | ||
279 | } | ||
280 | |||
281 | if (!isset($this->_directives['logger'])) { | ||
282 | Zend_Cache::throwException('Logging is enabled but logger is not set.'); | ||
283 | } | ||
284 | $logger = $this->_directives['logger']; | ||
285 | if (!$logger instanceof Zend_Log) { | ||
286 | Zend_Cache::throwException('Logger object is not an instance of Zend_Log class.'); | ||
287 | } | ||
288 | $logger->log($message, $priority); | ||
289 | } | ||
290 | } | ||