Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2005 Aurelien 1
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2
/**
3
 * CodeIgniter
4
 *
5
 * An open source application development framework for PHP 4.3.2 or newer
6
 *
7
 * @package		CodeIgniter
8
 * @author		ExpressionEngine Dev Team
9
 * @copyright	Copyright (c) 2008, EllisLab, Inc.
10
 * @license		http://codeigniter.com/user_guide/license.html
11
 * @link		http://codeigniter.com
12
 * @since		Version 1.0
13
 * @filesource
14
 */
15
16
// ------------------------------------------------------------------------
17
18
/**
19
 * Database Cache Class
20
 *
21
 * @category	Database
22
 * @author		ExpressionEngine Dev Team
23
 * @link		http://codeigniter.com/user_guide/database/
24
 */
25
class CI_DB_Cache {
26
27
	var $CI;
28
	var $db;	// allows passing of db object so that multiple database connections and returned db objects can be supported
29
30
	/**
31
	 * Constructor
32
	 *
33
	 * Grabs the CI super object instance so we can access it.
34
	 *
35
	 */
36
	function CI_DB_Cache(&$db)
37
	{
38
		// Assign the main CI object to $this->CI
39
		// and load the file helper since we use it a lot
40
		$this->CI =& get_instance();
41
		$this->db =& $db;
42
		$this->CI->load->helper('file');
43
	}
44
45
	// --------------------------------------------------------------------
46
47
	/**
48
	 * Set Cache Directory Path
49
	 *
50
	 * @access	public
51
	 * @param	string	the path to the cache directory
52
	 * @return	bool
53
	 */
54
	function check_path($path = '')
55
	{
56
		if ($path == '')
57
		{
58
			if ($this->db->cachedir == '')
59
			{
60
				return $this->db->cache_off();
61
			}
62
63
			$path = $this->db->cachedir;
64
		}
65
66
		// Add a trailing slash to the path if needed
67
		$path = preg_replace("/(.+?)\/*$/", "\\1/",  $path);
68
69
		if ( ! is_dir($path) OR ! is_really_writable($path))
70
		{
71
			// If the path is wrong we'll turn off caching
72
			return $this->db->cache_off();
73
		}
74
75
		$this->db->cachedir = $path;
76
		return TRUE;
77
	}
78
79
	// --------------------------------------------------------------------
80
81
	/**
82
	 * Retrieve a cached query
83
	 *
84
	 * The URI being requested will become the name of the cache sub-folder.
85
	 * An MD5 hash of the SQL statement will become the cache file name
86
	 *
87
	 * @access	public
88
	 * @return	string
89
	 */
90
	function read($sql)
91
	{
92
		if ( ! $this->check_path())
93
		{
94
			return $this->db->cache_off();
95
		}
96
97
		$segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
98
99
		$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
100
101
		$filepath = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'.md5($sql);
102
103
		if (FALSE === ($cachedata = read_file($filepath)))
104
		{
105
			return FALSE;
106
		}
107
108
		return unserialize($cachedata);
109
	}
110
111
	// --------------------------------------------------------------------
112
113
	/**
114
	 * Write a query to a cache file
115
	 *
116
	 * @access	public
117
	 * @return	bool
118
	 */
119
	function write($sql, $object)
120
	{
121
		if ( ! $this->check_path())
122
		{
123
			return $this->db->cache_off();
124
		}
125
126
		$segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
127
128
		$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
129
130
		$dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
131
132
		$filename = md5($sql);
133
134
		if ( ! @is_dir($dir_path))
135
		{
136
			if ( ! @mkdir($dir_path, DIR_WRITE_MODE))
137
			{
138
				return FALSE;
139
			}
140
141
			@chmod($dir_path, DIR_WRITE_MODE);
142
		}
143
144
		if (write_file($dir_path.$filename, serialize($object)) === FALSE)
145
		{
146
			return FALSE;
147
		}
148
149
		@chmod($dir_path.$filename, DIR_WRITE_MODE);
150
		return TRUE;
151
	}
152
153
	// --------------------------------------------------------------------
154
155
	/**
156
	 * Delete cache files within a particular directory
157
	 *
158
	 * @access	public
159
	 * @return	bool
160
	 */
161
	function delete($segment_one = '', $segment_two = '')
162
	{
163
		if ($segment_one == '')
164
		{
165
			$segment_one  = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
166
		}
167
168
		if ($segment_two == '')
169
		{
170
			$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
171
		}
172
173
		$dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
174
175
		delete_files($dir_path, TRUE);
176
	}
177
178
	// --------------------------------------------------------------------
179
180
	/**
181
	 * Delete all existing cache files
182
	 *
183
	 * @access	public
184
	 * @return	bool
185
	 */
186
	function delete_all()
187
	{
188
		delete_files($this->db->cachedir, TRUE);
189
	}
190
191
}
192
193
194
/* End of file DB_cache.php */
195
/* Location: ./system/database/DB_cache.php */