blob: 7ec2380a524d1584c419bae3e9838c203a4878e7 [file] [log] [blame]
Andrey Andreev7d4ea072011-12-25 19:23:50 +02001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Greg Akerbde25d92010-12-21 09:31:21 -06002/**
3 * CodeIgniter
4 *
Phil Sturgeon07c1ac82012-03-09 17:03:37 +00005 * An open source application development framework for PHP 5.2.4 or newer
Derek Jonesf4a4bd82011-10-20 12:18:42 -05006 *
7 * NOTICE OF LICENSE
Andrey Andreev7d4ea072011-12-25 19:23:50 +02008 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05009 * Licensed under the Open Software License version 3.0
Andrey Andreev7d4ea072011-12-25 19:23:50 +020010 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -050011 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
17 * licensing@ellislab.com so we can send you a copy immediately.
Greg Akerbde25d92010-12-21 09:31:21 -060018 *
19 * @package CodeIgniter
Derek Jonesf4a4bd82011-10-20 12:18:42 -050020 * @author EllisLab Dev Team
Greg Aker0defe5d2012-01-01 18:46:41 -060021 * @copyright Copyright (c) 2006 - 2012 EllisLab, Inc.
Derek Jonesf4a4bd82011-10-20 12:18:42 -050022 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
Greg Akerbde25d92010-12-21 09:31:21 -060023 * @link http://codeigniter.com
24 * @since Version 2.0
Andrey Andreev7d4ea072011-12-25 19:23:50 +020025 * @filesource
Greg Akerbde25d92010-12-21 09:31:21 -060026 */
27
Greg Akerbde25d92010-12-21 09:31:21 -060028/**
Andrey Andreev7d4ea072011-12-25 19:23:50 +020029 * CodeIgniter Caching Class
Greg Akerbde25d92010-12-21 09:31:21 -060030 *
31 * @package CodeIgniter
32 * @subpackage Libraries
33 * @category Core
Derek Jonesf4a4bd82011-10-20 12:18:42 -050034 * @author EllisLab Dev Team
Andrey Andreev7d4ea072011-12-25 19:23:50 +020035 * @link
Greg Akerbde25d92010-12-21 09:31:21 -060036 */
Phil Sturgeoneb2dcda2011-04-02 14:44:58 +010037class CI_Cache extends CI_Driver_Library {
Andrey Andreev7d4ea072011-12-25 19:23:50 +020038
Timothy Warren0688ac92012-04-20 10:25:04 -040039 /**
40 * Valid cache drivers
41 *
42 * @var array
43 */
Andrey Andreev58c2b102012-10-26 14:42:29 +030044 protected $valid_drivers = array(
Anton Lindqvist30930422012-04-25 12:32:58 +020045 'cache_apc',
Anton Lindqvist6581cac2012-04-25 12:35:41 +020046 'cache_dummy',
Anton Lindqvist30930422012-04-25 12:32:58 +020047 'cache_file',
Anton Lindqvist6581cac2012-04-25 12:35:41 +020048 'cache_memcached',
Anton Lindqvist30930422012-04-25 12:32:58 +020049 'cache_redis',
50 'cache_wincache'
51 );
Greg Akerbde25d92010-12-21 09:31:21 -060052
Timothy Warren0688ac92012-04-20 10:25:04 -040053 /**
54 * Path of cache files (if file-based cache)
55 *
56 * @var string
57 */
58 protected $_cache_path = NULL;
Andrey Andreev56454792012-05-17 14:32:19 +030059
Timothy Warren0688ac92012-04-20 10:25:04 -040060 /**
61 * Reference to the driver
62 *
Timothy Warrenb82bc3a2012-04-27 09:12:58 -040063 * @var mixed
Timothy Warren0688ac92012-04-20 10:25:04 -040064 */
65 protected $_adapter = 'dummy';
Andrey Andreev56454792012-05-17 14:32:19 +030066
Timothy Warren0688ac92012-04-20 10:25:04 -040067 /**
68 * Fallback driver
69 *
Andrey Andreev58c2b102012-10-26 14:42:29 +030070 * @var string
Timothy Warren0688ac92012-04-20 10:25:04 -040071 */
Eric Robertsbf50a3b2012-05-27 19:04:43 -050072 protected $_backup_driver = 'dummy';
Andrey Andreev7d4ea072011-12-25 19:23:50 +020073
Greg Akerbde25d92010-12-21 09:31:21 -060074 /**
Andrey Andreev58c2b102012-10-26 14:42:29 +030075 * Cache key prefix
76 *
77 * @var string
78 */
79 public $key_prefix = '';
80
81 /**
Greg Akerbde25d92010-12-21 09:31:21 -060082 * Constructor
83 *
Greg Akerbde25d92010-12-21 09:31:21 -060084 * Initialize class properties based on the configuration array.
85 *
Andrey Andreev58c2b102012-10-26 14:42:29 +030086 * @param array $config = array()
Andrey Andreevb24b0332012-03-26 15:34:39 +030087 * @return void
Greg Akerbde25d92010-12-21 09:31:21 -060088 */
Andrey Andreevb24b0332012-03-26 15:34:39 +030089 public function __construct($config = array())
Greg Aker03abee32011-12-25 00:31:29 -060090 {
Greg Akerbde25d92010-12-21 09:31:21 -060091 $default_config = array(
Timothy Warren0688ac92012-04-20 10:25:04 -040092 'adapter',
93 'memcached'
94 );
Greg Akerbde25d92010-12-21 09:31:21 -060095
96 foreach ($default_config as $key)
97 {
98 if (isset($config[$key]))
99 {
100 $param = '_'.$key;
101
102 $this->{$param} = $config[$key];
103 }
104 }
105
vkeranov94b1f762012-10-27 18:19:59 +0300106 isset($config['key_prefix']) && $this->key_prefix = $config['key_prefix'];
Andrey Andreev58c2b102012-10-26 14:42:29 +0300107
108 if (isset($config['backup']) && in_array('cache_'.$config['backup'], $this->valid_drivers))
Greg Akerbde25d92010-12-21 09:31:21 -0600109 {
Andrey Andreev58c2b102012-10-26 14:42:29 +0300110 $this->_backup_driver = $config['backup'];
Greg Akerbde25d92010-12-21 09:31:21 -0600111 }
Eric Robertsbf50a3b2012-05-27 19:04:43 -0500112
113 // If the specified adapter isn't available, check the backup.
114 if ( ! $this->is_supported($this->_adapter))
115 {
116 if ( ! $this->is_supported($this->_backup_driver))
117 {
118 // Backup isn't supported either. Default to 'Dummy' driver.
119 log_message('error', 'Cache adapter "'.$this->_adapter.'" and backup "'.$this->_backup_driver.'" are both unavailable. Cache is now using "Dummy" adapter.');
120 $this->_adapter = 'dummy';
121 }
122 else
123 {
124 // Backup is supported. Set it to primary.
125 $this->_adapter = $this->_backup_driver;
126 }
127 }
Greg Akerbde25d92010-12-21 09:31:21 -0600128 }
129
130 // ------------------------------------------------------------------------
131
132 /**
Andrey Andreevb24b0332012-03-26 15:34:39 +0300133 * Get
134 *
135 * Look for a value in the cache. If it exists, return the data
136 * if not, return FALSE
137 *
Andrey Andreev58c2b102012-10-26 14:42:29 +0300138 * @param string $id
139 * @return mixed value matching $id or FALSE on failure
Andrey Andreevb24b0332012-03-26 15:34:39 +0300140 */
141 public function get($id)
142 {
Andrey Andreev58c2b102012-10-26 14:42:29 +0300143 return $this->{$this->_adapter}->get($this->key_prefix.$id);
Andrey Andreevb24b0332012-03-26 15:34:39 +0300144 }
145
146 // ------------------------------------------------------------------------
147
148 /**
149 * Cache Save
150 *
Andrey Andreev58c2b102012-10-26 14:42:29 +0300151 * @param string $id Cache ID
152 * @param mixed $data Data to store
153 * @param int $ttl = 60 Cache TTL (in seconds)
154 * @return bool TRUE on success, FALSE on failure
Andrey Andreevb24b0332012-03-26 15:34:39 +0300155 */
156 public function save($id, $data, $ttl = 60)
157 {
Andrey Andreev58c2b102012-10-26 14:42:29 +0300158 return $this->{$this->_adapter}->save($this->key_prefix.$id, $data, $ttl);
Andrey Andreevb24b0332012-03-26 15:34:39 +0300159 }
160
161 // ------------------------------------------------------------------------
162
163 /**
164 * Delete from Cache
165 *
Andrey Andreev58c2b102012-10-26 14:42:29 +0300166 * @param string $id Cache ID
167 * @return bool TRUE on success, FALSE on failure
Andrey Andreevb24b0332012-03-26 15:34:39 +0300168 */
169 public function delete($id)
170 {
Andrey Andreev58c2b102012-10-26 14:42:29 +0300171 return $this->{$this->_adapter}->delete($this->key_prefix.$id);
Andrey Andreevb24b0332012-03-26 15:34:39 +0300172 }
173
174 // ------------------------------------------------------------------------
175
176 /**
177 * Clean the cache
178 *
Andrey Andreev58c2b102012-10-26 14:42:29 +0300179 * @return bool TRUE on success, FALSE on failure
Andrey Andreevb24b0332012-03-26 15:34:39 +0300180 */
181 public function clean()
182 {
183 return $this->{$this->_adapter}->clean();
184 }
185
186 // ------------------------------------------------------------------------
187
188 /**
189 * Cache Info
190 *
Andrey Andreev58c2b102012-10-26 14:42:29 +0300191 * @param string $type = 'user' user/filehits
192 * @return mixed array containing cache info on success OR FALSE on failure
Andrey Andreevb24b0332012-03-26 15:34:39 +0300193 */
194 public function cache_info($type = 'user')
195 {
196 return $this->{$this->_adapter}->cache_info($type);
197 }
198
199 // ------------------------------------------------------------------------
200
201 /**
202 * Get Cache Metadata
203 *
Andrey Andreev58c2b102012-10-26 14:42:29 +0300204 * @param string $id key to get cache metadata on
205 * @return mixed cache item metadata
Andrey Andreevb24b0332012-03-26 15:34:39 +0300206 */
207 public function get_metadata($id)
208 {
Andrey Andreev58c2b102012-10-26 14:42:29 +0300209 return $this->{$this->_adapter}->get_metadata($this->key_prefix.$id);
Andrey Andreevb24b0332012-03-26 15:34:39 +0300210 }
211
212 // ------------------------------------------------------------------------
213
214 /**
Greg Akerbde25d92010-12-21 09:31:21 -0600215 * Is the requested driver supported in this environment?
216 *
Andrey Andreev58c2b102012-10-26 14:42:29 +0300217 * @param string $driver The driver to test
Andrey Andreevb24b0332012-03-26 15:34:39 +0300218 * @return array
Greg Akerbde25d92010-12-21 09:31:21 -0600219 */
220 public function is_supported($driver)
221 {
222 static $support = array();
223
224 if ( ! isset($support[$driver]))
225 {
226 $support[$driver] = $this->{$driver}->is_supported();
227 }
228
229 return $support[$driver];
230 }
231
Greg Akerbde25d92010-12-21 09:31:21 -0600232}
Greg Akerbde25d92010-12-21 09:31:21 -0600233
234/* End of file Cache.php */
Andrey Andreev9e674f72012-06-09 21:02:52 +0300235/* Location: ./system/libraries/Cache/Cache.php */