/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/database/DB_cache.php

  • Committer: elof.bigestans at gmail
  • Date: 2013-04-03 08:06:30 UTC
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: elof.bigestans@gmail.com-20130403080630-r721wlstq15mdjby
Added new folders to match new folder structure

Show diffs side-by-side

added added

removed removed

Lines of Context:
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 */
 
 
b'\\ No newline at end of file'