bzr branch
http://gegoxaren.bato24.eu/bzr/lenasys/trunk
20.1.1
by galaxyAbstractor
* Added an simple admin panel to the codeviewer-cmssy stuff |
1 |
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); |
2 |
/**
|
|
3 |
* CodeIgniter
|
|
4 |
*
|
|
5 |
* An open source application development framework for PHP 5.1.6 or newer
|
|
6 |
*
|
|
7 |
* @package CodeIgniter
|
|
8 |
* @author ExpressionEngine Dev Team
|
|
9 |
* @copyright Copyright (c) 2008 - 2011, 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 __construct(&$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, FILE_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 */
|