| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 | 
							- <?php
 
- /**
 
-  * CodeIgniter
 
-  *
 
-  * An open source application development framework for PHP
 
-  *
 
-  * This content is released under the MIT License (MIT)
 
-  *
 
-  * Copyright (c) 2014 - 2017, British Columbia Institute of Technology
 
-  *
 
-  * Permission is hereby granted, free of charge, to any person obtaining a copy
 
-  * of this software and associated documentation files (the "Software"), to deal
 
-  * in the Software without restriction, including without limitation the rights
 
-  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
-  * copies of the Software, and to permit persons to whom the Software is
 
-  * furnished to do so, subject to the following conditions:
 
-  *
 
-  * The above copyright notice and this permission notice shall be included in
 
-  * all copies or substantial portions of the Software.
 
-  *
 
-  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
-  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
-  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
-  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
-  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
-  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
-  * THE SOFTWARE.
 
-  *
 
-  * @package	CodeIgniter
 
-  * @author	EllisLab Dev Team
 
-  * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 
-  * @copyright	Copyright (c) 2014 - 2017, British Columbia Institute of Technology (http://bcit.ca/)
 
-  * @license	http://opensource.org/licenses/MIT	MIT License
 
-  * @link	https://codeigniter.com
 
-  * @since	Version 1.0.0
 
-  * @filesource
 
-  */
 
- defined('BASEPATH') OR exit('No direct script access allowed');
 
- /**
 
-  * Database Cache Class
 
-  *
 
-  * @category	Database
 
-  * @author		EllisLab Dev Team
 
-  * @link		https://codeigniter.com/user_guide/database/
 
-  */
 
- class CI_DB_Cache {
 
- 	/**
 
- 	 * CI Singleton
 
- 	 *
 
- 	 * @var	object
 
- 	 */
 
- 	public $CI;
 
- 	/**
 
- 	 * Database object
 
- 	 *
 
- 	 * Allows passing of DB object so that multiple database connections
 
- 	 * and returned DB objects can be supported.
 
- 	 *
 
- 	 * @var	object
 
- 	 */
 
- 	public $db;
 
- 	// --------------------------------------------------------------------
 
- 	/**
 
- 	 * Constructor
 
- 	 *
 
- 	 * @param	object	&$db
 
- 	 * @return	void
 
- 	 */
 
- 	public function __construct(&$db)
 
- 	{
 
- 		// Assign the main CI object to $this->CI and load the file helper since we use it a lot
 
- 		$this->CI =& get_instance();
 
- 		$this->db =& $db;
 
- 		$this->CI->load->helper('file');
 
- 		$this->check_path();
 
- 	}
 
- 	// --------------------------------------------------------------------
 
- 	/**
 
- 	 * Set Cache Directory Path
 
- 	 *
 
- 	 * @param	string	$path	Path to the cache directory
 
- 	 * @return	bool
 
- 	 */
 
- 	public function check_path($path = '')
 
- 	{
 
- 		if ($path === '')
 
- 		{
 
- 			if ($this->db->cachedir === '')
 
- 			{
 
- 				return $this->db->cache_off();
 
- 			}
 
- 			$path = $this->db->cachedir;
 
- 		}
 
- 		// Add a trailing slash to the path if needed
 
- 		$path = realpath($path)
 
- 			? rtrim(realpath($path), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR
 
- 			: rtrim($path, '/').'/';
 
- 		if ( ! is_dir($path))
 
- 		{
 
- 			log_message('debug', 'DB cache path error: '.$path);
 
- 			// If the path is wrong we'll turn off caching
 
- 			return $this->db->cache_off();
 
- 		}
 
- 		if ( ! is_really_writable($path))
 
- 		{
 
- 			log_message('debug', 'DB cache dir not writable: '.$path);
 
- 			// If the path is not really writable we'll turn off caching
 
- 			return $this->db->cache_off();
 
- 		}
 
- 		$this->db->cachedir = $path;
 
- 		return TRUE;
 
- 	}
 
- 	// --------------------------------------------------------------------
 
- 	/**
 
- 	 * Retrieve a cached query
 
- 	 *
 
- 	 * The URI being requested will become the name of the cache sub-folder.
 
- 	 * An MD5 hash of the SQL statement will become the cache file name.
 
- 	 *
 
- 	 * @param	string	$sql
 
- 	 * @return	string
 
- 	 */
 
- 	public function read($sql)
 
- 	{
 
- 		$segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
 
- 		$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
 
- 		$filepath = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'.md5($sql);
 
- 		if (FALSE === ($cachedata = @file_get_contents($filepath)))
 
- 		{
 
- 			return FALSE;
 
- 		}
 
- 		return unserialize($cachedata);
 
- 	}
 
- 	// --------------------------------------------------------------------
 
- 	/**
 
- 	 * Write a query to a cache file
 
- 	 *
 
- 	 * @param	string	$sql
 
- 	 * @param	object	$object
 
- 	 * @return	bool
 
- 	 */
 
- 	public function write($sql, $object)
 
- 	{
 
- 		$segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
 
- 		$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
 
- 		$dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
 
- 		$filename = md5($sql);
 
- 		if ( ! is_dir($dir_path) && ! @mkdir($dir_path, 0750))
 
- 		{
 
- 			return FALSE;
 
- 		}
 
- 		if (write_file($dir_path.$filename, serialize($object)) === FALSE)
 
- 		{
 
- 			return FALSE;
 
- 		}
 
- 		chmod($dir_path.$filename, 0640);
 
- 		return TRUE;
 
- 	}
 
- 	// --------------------------------------------------------------------
 
- 	/**
 
- 	 * Delete cache files within a particular directory
 
- 	 *
 
- 	 * @param	string	$segment_one
 
- 	 * @param	string	$segment_two
 
- 	 * @return	void
 
- 	 */
 
- 	public function delete($segment_one = '', $segment_two = '')
 
- 	{
 
- 		if ($segment_one === '')
 
- 		{
 
- 			$segment_one  = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
 
- 		}
 
- 		if ($segment_two === '')
 
- 		{
 
- 			$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
 
- 		}
 
- 		$dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
 
- 		delete_files($dir_path, TRUE);
 
- 	}
 
- 	// --------------------------------------------------------------------
 
- 	/**
 
- 	 * Delete all existing cache files
 
- 	 *
 
- 	 * @return	void
 
- 	 */
 
- 	public function delete_all()
 
- 	{
 
- 		delete_files($this->db->cachedir, TRUE, TRUE);
 
- 	}
 
- }
 
 
  |