Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 4.3.2 or newer
 *
 * @package             CodeIgniter
 * @author              ExpressionEngine Dev Team
 * @copyright   Copyright (c) 2006 - 2012 EllisLab, Inc.
 * @license             http://codeigniter.com/user_guide/license.html
 * @link                http://codeigniter.com
 * @since               Version 2.0
 * @filesource  
 */

// ------------------------------------------------------------------------

/**
 * CodeIgniter Memcached Caching Class 
 *
 * @package             CodeIgniter
 * @subpackage  Libraries
 * @category    Core
 * @author              ExpressionEngine Dev Team
 * @link                
 */

class CI_Cache_file extends CI_Driver {

        protected $_cache_path;

        /**
         * Constructor
         */
        public function __construct()
        {
                $CI =& get_instance();
                $CI->load->helper('file');
                
                $path = $CI->config->item('cache_path');
        
                $this->_cache_path = ($path == '') ? APPPATH.'cache/' : $path;
        }

        // ------------------------------------------------------------------------

        /**
         * Fetch from cache
         *
         * @param       mixed           unique key id
         * @return      mixed           data on success/false on failure
         */
        public function get($id)
        {
                if ( ! file_exists($this->_cache_path.$id))
                {
                        return FALSE;
                }
                
                $data = read_file($this->_cache_path.$id);
                $data = unserialize($data);
                
                if (time() >  $data['time'] + $data['ttl'])
                {
                        unlink($this->_cache_path.$id);
                        return FALSE;
                }
                
                return $data['data'];
        }

        // ------------------------------------------------------------------------

        /**
         * Save into cache
         *
         * @param       string          unique key
         * @param       mixed           data to store
         * @param       int                     length of time (in seconds) the cache is valid 
         *                                              - Default is 60 seconds
         * @return      boolean         true on success/false on failure
         */
        public function save($id, $data, $ttl = 60)
        {               
                $contents = array(
                                'time'          => time(),
                                'ttl'           => $ttl,                        
                                'data'          => $data
                        );
                
                if (write_file($this->_cache_path.$id, serialize($contents)))
                {
                        @chmod($this->_cache_path.$id, 0777);
                        return TRUE;                    
                }

                return FALSE;
        }

        // ------------------------------------------------------------------------

        /**
         * Delete from Cache
         *
         * @param       mixed           unique identifier of item in cache
         * @return      boolean         true on success/false on failure
         */
        public function delete($id)
        {
                return unlink($this->_cache_path.$id);
        }

        // ------------------------------------------------------------------------

        /**
         * Clean the Cache
         *
         * @return      boolean         false on failure/true on success
         */     
        public function clean()
        {
                return delete_files($this->_cache_path);
        }

        // ------------------------------------------------------------------------

        /**
         * Cache Info
         *
         * Not supported by file-based caching
         *
         * @param       string  user/filehits
         * @return      mixed   FALSE
         */
        public function cache_info($type = NULL)
        {
                return get_dir_file_info($this->_cache_path);
        }

        // ------------------------------------------------------------------------

        /**
         * Get Cache Metadata
         *
         * @param       mixed           key to get cache metadata on
         * @return      mixed           FALSE on failure, array on success.
         */
        public function get_metadata($id)
        {
                if ( ! file_exists($this->_cache_path.$id))
                {
                        return FALSE;
                }

                $data = read_file($this->_cache_path.$id);
                $data = unserialize($data);

                if (is_array($data))
                {
                        $mtime = filemtime($this->_cache_path.$id);

                        if ( ! isset($data['ttl']))
                        {
                                return FALSE;
                        }

                        return array(
                                'expire'        => $mtime + $data['ttl'],
                                'mtime'         => $mtime
                        );
                }

                return FALSE;
        }

        // ------------------------------------------------------------------------

        /**
         * Is supported
         *
         * In the file driver, check to see that the cache directory is indeed writable
         * 
         * @return boolean
         */
        public function is_supported()
        {
                return is_really_writable($this->_cache_path);
        }

        // ------------------------------------------------------------------------
}
// End Class

/* End of file Cache_file.php */
/* Location: ./system/libraries/Cache/drivers/Cache_file.php */