CodeIgniter installed
[living-lab-site.git] / system / libraries / Cache / drivers / Cache_file.php
diff --git a/system/libraries/Cache/drivers/Cache_file.php b/system/libraries/Cache/drivers/Cache_file.php
new file mode 100755 (executable)
index 0000000..13e2d1a
--- /dev/null
@@ -0,0 +1,196 @@
+<?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 - 2011 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))
+               {
+                       $data = $data['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 */
\ No newline at end of file