/usr/share/php/Horde/Cache/Storage/Stack.php is in php-horde-cache 2.5.4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | <?php
/**
* Copyright 2010-2016 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @category Horde
* @copyright 2010-2016 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Cache
*/
/**
* Driver that loops through a given list of storage drivers to search for a
* cached value. Allows for use of caching backends on top of persistent
* backends.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2010-2016 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Cache
*/
class Horde_Cache_Storage_Stack extends Horde_Cache_Storage_Base
{
/**
* Stack of cache drivers.
*
* @var string
*/
protected $_stack = array();
/**
* Constructor.
*
* @param array $params Parameters:
* <pre>
* - stack: (array) [REQUIRED] An array of storage instances to loop
* through, in order of priority. The last entry is considered
* the 'master' driver, for purposes of writes.
* </pre>
*/
public function __construct(array $params = array())
{
if (!isset($params['stack'])) {
throw new InvalidArgumentException('Missing stack parameter.');
}
parent::__construct($params);
}
/**
*/
protected function _initOb()
{
$this->_stack = array_values($this->_params['stack']);
}
/**
*/
public function get($key, $lifetime = 0)
{
foreach ($this->_stack as $val) {
if (($result = $val->get($key, $lifetime)) !== false) {
return $result;
}
}
return false;
}
/**
*/
public function set($key, $data, $lifetime = 0)
{
/* Do writes in *reverse* order, since a failure on the master should
* not allow writes on the other backends. */
foreach (array_reverse($this->_stack) as $k => $v) {
if (($result = $v->set($key, $data, $lifetime)) === false) {
if ($k === 0) {
return;
}
/* Invalidate cache if write failed. */
$val->expire($k);
}
}
}
/**
*/
public function exists($key, $lifetime = 0)
{
foreach ($this->_stack as $val) {
if (($result = $val->exists($key, $lifetime)) === true) {
break;
}
}
return $result;
}
/**
*/
public function expire($key)
{
foreach ($this->_stack as $val) {
$success = $val->expire($key);
}
/* Success is reported from last (master) expire() call. */
return $success;
}
/**
*/
public function clear()
{
foreach ($this->_stack as $val) {
try {
$val->clear();
$ex = null;
} catch (Horde_Cache_Exception $e) {
$ex = $e;
}
}
if ($ex) {
throw $ex;
}
}
}
|