DB_cache.php
Go to the documentation of this file.00001 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 class CI_DB_Cache {
00026
00027 var $CI;
00028 var $db;
00029
00030
00031
00032
00033
00034
00035
00036 function CI_DB_Cache(&$db)
00037 {
00038
00039
00040 $this->CI =& get_instance();
00041 $this->db =& $db;
00042 $this->CI->load->helper('file');
00043 }
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 function check_path($path = '')
00055 {
00056 if ($path == '')
00057 {
00058 if ($this->db->cachedir == '')
00059 {
00060 return $this->db->cache_off();
00061 }
00062
00063 $path = $this->db->cachedir;
00064 }
00065
00066
00067 $path = preg_replace("/(.+?)\/*$/", "\\1/", $path);
00068
00069 if ( ! is_dir($path) OR ! is_really_writable($path))
00070 {
00071
00072 return $this->db->cache_off();
00073 }
00074
00075 $this->db->cachedir = $path;
00076 return TRUE;
00077 }
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 function read($sql)
00091 {
00092 if ( ! $this->check_path())
00093 {
00094 return $this->db->cache_off();
00095 }
00096
00097 $uri = ($this->CI->uri->segment(1) == FALSE) ? 'default.' : $this->CI->uri->segment(1).'+';
00098 $uri .= ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
00099
00100 $filepath = $uri.'/'.md5($sql);
00101
00102 if (FALSE === ($cachedata = read_file($this->db->cachedir.$filepath)))
00103 {
00104 return FALSE;
00105 }
00106
00107 return unserialize($cachedata);
00108 }
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 function write($sql, $object)
00119 {
00120 if ( ! $this->check_path())
00121 {
00122 return $this->db->cache_off();
00123 }
00124
00125 $uri = ($this->CI->uri->segment(1) == FALSE) ? 'default.' : $this->CI->uri->segment(1).'+';
00126 $uri .= ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
00127
00128 $dir_path = $this->db->cachedir.$uri.'/';
00129
00130 $filename = md5($sql);
00131
00132 if ( ! @is_dir($dir_path))
00133 {
00134 if ( ! @mkdir($dir_path, DIR_WRITE_MODE))
00135 {
00136 return FALSE;
00137 }
00138
00139 @chmod($dir_path, DIR_WRITE_MODE);
00140 }
00141
00142 if (write_file($dir_path.$filename, serialize($object)) === FALSE)
00143 {
00144 return FALSE;
00145 }
00146
00147 @chmod($dir_path.$filename, DIR_WRITE_MODE);
00148 return TRUE;
00149 }
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159 function delete($segment_one = '', $segment_two = '')
00160 {
00161 if ($segment_one == '')
00162 {
00163 $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
00164 }
00165
00166 if ($segment_two == '')
00167 {
00168 $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
00169 }
00170
00171 $dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
00172
00173 delete_files($dir_path, TRUE);
00174 }
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184 function delete_all()
00185 {
00186 delete_files($this->db->cachedir, TRUE);
00187 }
00188
00189 }
00190
00191
00192
00193