Subversion-Projekte lars-tiefland.ci

Revision

Revision 2049 | Zur aktuellen Revision | Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
68 lars 1
<?php
2
/**
3
 * CodeIgniter
4
 *
5
 * An open source application development framework for PHP
6
 *
7
 * This content is released under the MIT License (MIT)
8
 *
9
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
10
 *
11
 * Permission is hereby granted, free of charge, to any person obtaining a copy
12
 * of this software and associated documentation files (the "Software"), to deal
13
 * in the Software without restriction, including without limitation the rights
14
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
 * copies of the Software, and to permit persons to whom the Software is
16
 * furnished to do so, subject to the following conditions:
17
 *
18
 * The above copyright notice and this permission notice shall be included in
19
 * all copies or substantial portions of the Software.
20
 *
21
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27
 * THE SOFTWARE.
28
 *
29
 * @package	CodeIgniter
30
 * @author	EllisLab Dev Team
31
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
32
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
33
 * @license	http://opensource.org/licenses/MIT	MIT License
34
 * @link	https://codeigniter.com
35
 * @since	Version 2.0.0
36
 * @filesource
37
 */
38
defined('BASEPATH') OR exit('No direct script access allowed');
39
 
40
/**
41
 * CodeIgniter APC Caching Class
42
 *
43
 * @package		CodeIgniter
44
 * @subpackage	Libraries
45
 * @category	Core
46
 * @author		EllisLab Dev Team
47
 * @link
48
 */
49
class CI_Cache_apc extends CI_Driver {
50
 
51
	/**
52
	 * Class constructor
53
	 *
54
	 * Only present so that an error message is logged
55
	 * if APC is not available.
56
	 *
57
	 * @return	void
58
	 */
59
	public function __construct()
60
	{
61
		if ( ! $this->is_supported())
62
		{
63
			log_message('error', 'Cache: Failed to initialize APC; extension not loaded/enabled?');
64
		}
65
	}
66
 
67
	// ------------------------------------------------------------------------
68
 
69
	/**
70
	 * Get
71
	 *
72
	 * Look for a value in the cache. If it exists, return the data
73
	 * if not, return FALSE
74
	 *
75
	 * @param	string
76
	 * @return	mixed	value that is stored/FALSE on failure
77
	 */
78
	public function get($id)
79
	{
80
		$success = FALSE;
81
		$data = apc_fetch($id, $success);
82
 
83
		if ($success === TRUE)
84
		{
85
			return is_array($data)
86
				? unserialize($data[0])
87
				: $data;
88
		}
89
 
90
		return FALSE;
91
	}
92
 
93
	// ------------------------------------------------------------------------
94
 
95
	/**
96
	 * Cache Save
97
	 *
98
	 * @param	string	$id	Cache ID
99
	 * @param	mixed	$data	Data to store
100
	 * @param	int	$ttl	Length of time (in seconds) to cache the data
101
	 * @param	bool	$raw	Whether to store the raw value
102
	 * @return	bool	TRUE on success, FALSE on failure
103
	 */
104
	public function save($id, $data, $ttl = 60, $raw = FALSE)
105
	{
106
		$ttl = (int) $ttl;
107
 
108
		return apc_store(
109
			$id,
110
			($raw === TRUE ? $data : array(serialize($data), time(), $ttl)),
111
			$ttl
112
		);
113
	}
114
 
115
	// ------------------------------------------------------------------------
116
 
117
	/**
118
	 * Delete from Cache
119
	 *
120
	 * @param	mixed	unique identifier of the item in the cache
121
	 * @return	bool	true on success/false on failure
122
	 */
123
	public function delete($id)
124
	{
125
		return apc_delete($id);
126
	}
127
 
128
	// ------------------------------------------------------------------------
129
 
130
	/**
131
	 * Increment a raw value
132
	 *
133
	 * @param	string	$id	Cache ID
134
	 * @param	int	$offset	Step/value to add
135
	 * @return	mixed	New value on success or FALSE on failure
136
	 */
137
	public function increment($id, $offset = 1)
138
	{
139
		return apc_inc($id, $offset);
140
	}
141
 
142
	// ------------------------------------------------------------------------
143
 
144
	/**
145
	 * Decrement a raw value
146
	 *
147
	 * @param	string	$id	Cache ID
148
	 * @param	int	$offset	Step/value to reduce by
149
	 * @return	mixed	New value on success or FALSE on failure
150
	 */
151
	public function decrement($id, $offset = 1)
152
	{
153
		return apc_dec($id, $offset);
154
	}
155
 
156
	// ------------------------------------------------------------------------
157
 
158
	/**
159
	 * Clean the cache
160
	 *
161
	 * @return	bool	false on failure/true on success
162
	 */
163
	public function clean()
164
	{
165
		return apc_clear_cache('user');
166
	}
167
 
168
	// ------------------------------------------------------------------------
169
 
170
	/**
171
	 * Cache Info
172
	 *
173
	 * @param	string	user/filehits
174
	 * @return	mixed	array on success, false on failure
175
	 */
176
	 public function cache_info($type = NULL)
177
	 {
178
		 return apc_cache_info($type);
179
	 }
180
 
181
	// ------------------------------------------------------------------------
182
 
183
	/**
184
	 * Get Cache Metadata
185
	 *
186
	 * @param	mixed	key to get cache metadata on
187
	 * @return	mixed	array on success/false on failure
188
	 */
189
	public function get_metadata($id)
190
	{
191
		$success = FALSE;
192
		$stored = apc_fetch($id, $success);
193
 
194
		if ($success === FALSE OR count($stored) !== 3)
195
		{
196
			return FALSE;
197
		}
198
 
199
		list($data, $time, $ttl) = $stored;
200
 
201
		return array(
202
			'expire'	=> $time + $ttl,
203
			'mtime'		=> $time,
204
			'data'		=> unserialize($data)
205
		);
206
	}
207
 
208
	// ------------------------------------------------------------------------
209
 
210
	/**
211
	 * is_supported()
212
	 *
213
	 * Check to see if APC is available on this system, bail if it isn't.
214
	 *
215
	 * @return	bool
216
	 */
217
	public function is_supported()
218
	{
219
		return (extension_loaded('apc') && ini_get('apc.enabled'));
220
	}
221
}