2019-12-18 16:07:09 -05:00
< ? php
2014-08-08 15:41:59 -04:00
/**
* CodeIgniter
*
2019-12-18 16:07:09 -05:00
* An open source application development framework for PHP
2014-08-08 15:41:59 -04:00
*
2019-12-18 16:07:09 -05:00
* This content is released under the MIT License ( MIT )
*
* Copyright ( c ) 2014 - 2019 , 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 - 2019 , British Columbia Institute of Technology ( https :// bcit . ca / )
* @ license https :// opensource . org / licenses / MIT MIT License
* @ link https :// codeigniter . com
* @ since Version 2.0 . 0
2014-08-08 15:41:59 -04:00
* @ filesource
*/
2019-12-18 16:07:09 -05:00
defined ( 'BASEPATH' ) OR exit ( 'No direct script access allowed' );
2014-08-08 15:41:59 -04:00
/**
* CodeIgniter Caching Class
*
* @ package CodeIgniter
* @ subpackage Libraries
* @ category Core
2019-12-18 16:07:09 -05:00
* @ author EllisLab Dev Team
2014-08-08 15:41:59 -04:00
* @ link
*/
class CI_Cache extends CI_Driver_Library {
2019-12-18 16:07:09 -05:00
/**
* Valid cache drivers
*
* @ var array
*/
protected $valid_drivers = array (
'apc' ,
'dummy' ,
'file' ,
'memcached' ,
'redis' ,
'wincache'
2014-08-08 15:41:59 -04:00
);
2019-12-18 16:07:09 -05:00
/**
* Path of cache files ( if file - based cache )
*
* @ var string
*/
protected $_cache_path = NULL ;
2014-08-08 15:41:59 -04:00
2019-12-18 16:07:09 -05:00
/**
* Reference to the driver
*
* @ var mixed
*/
protected $_adapter = 'dummy' ;
/**
* Fallback driver
*
* @ var string
*/
protected $_backup_driver = 'dummy' ;
/**
* Cache key prefix
*
* @ var string
*/
public $key_prefix = '' ;
2014-08-08 15:41:59 -04:00
/**
* Constructor
*
2019-12-18 16:07:09 -05:00
* Initialize class properties based on the configuration array .
*
* @ param array $config = array ()
* @ return void
2014-08-08 15:41:59 -04:00
*/
public function __construct ( $config = array ())
{
2019-12-18 16:07:09 -05:00
isset ( $config [ 'adapter' ]) && $this -> _adapter = $config [ 'adapter' ];
isset ( $config [ 'backup' ]) && $this -> _backup_driver = $config [ 'backup' ];
isset ( $config [ 'key_prefix' ]) && $this -> key_prefix = $config [ 'key_prefix' ];
// If the specified adapter isn't available, check the backup.
if ( ! $this -> is_supported ( $this -> _adapter ))
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
if ( ! $this -> is_supported ( $this -> _backup_driver ))
{
// Backup isn't supported either. Default to 'Dummy' driver.
log_message ( 'error' , 'Cache adapter "' . $this -> _adapter . '" and backup "' . $this -> _backup_driver . '" are both unavailable. Cache is now using "Dummy" adapter.' );
$this -> _adapter = 'dummy' ;
}
else
{
// Backup is supported. Set it to primary.
log_message ( 'debug' , 'Cache adapter "' . $this -> _adapter . '" is unavailable. Falling back to "' . $this -> _backup_driver . '" backup adapter.' );
$this -> _adapter = $this -> _backup_driver ;
}
2014-08-08 15:41:59 -04:00
}
}
// ------------------------------------------------------------------------
/**
* Get
*
2019-12-18 16:07:09 -05:00
* Look for a value in the cache . If it exists , return the data
2014-08-08 15:41:59 -04:00
* if not , return FALSE
*
2019-12-18 16:07:09 -05:00
* @ param string $id
* @ return mixed value matching $id or FALSE on failure
2014-08-08 15:41:59 -04:00
*/
public function get ( $id )
{
2019-12-18 16:07:09 -05:00
return $this -> { $this -> _adapter } -> get ( $this -> key_prefix . $id );
2014-08-08 15:41:59 -04:00
}
// ------------------------------------------------------------------------
/**
* Cache Save
*
2019-12-18 16:07:09 -05:00
* @ param string $id Cache ID
* @ param mixed $data Data to store
* @ param int $ttl Cache TTL ( in seconds )
* @ param bool $raw Whether to store the raw value
* @ return bool TRUE on success , FALSE on failure
2014-08-08 15:41:59 -04:00
*/
2019-12-18 16:07:09 -05:00
public function save ( $id , $data , $ttl = 60 , $raw = FALSE )
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
return $this -> { $this -> _adapter } -> save ( $this -> key_prefix . $id , $data , $ttl , $raw );
2014-08-08 15:41:59 -04:00
}
// ------------------------------------------------------------------------
/**
* Delete from Cache
*
2019-12-18 16:07:09 -05:00
* @ param string $id Cache ID
* @ return bool TRUE on success , FALSE on failure
2014-08-08 15:41:59 -04:00
*/
public function delete ( $id )
{
2019-12-18 16:07:09 -05:00
return $this -> { $this -> _adapter } -> delete ( $this -> key_prefix . $id );
2014-08-08 15:41:59 -04:00
}
// ------------------------------------------------------------------------
/**
2019-12-18 16:07:09 -05:00
* Increment a raw value
2014-08-08 15:41:59 -04:00
*
2019-12-18 16:07:09 -05:00
* @ param string $id Cache ID
* @ param int $offset Step / value to add
* @ return mixed New value on success or FALSE on failure
2014-08-08 15:41:59 -04:00
*/
2019-12-18 16:07:09 -05:00
public function increment ( $id , $offset = 1 )
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
return $this -> { $this -> _adapter } -> increment ( $this -> key_prefix . $id , $offset );
2014-08-08 15:41:59 -04:00
}
// ------------------------------------------------------------------------
/**
2019-12-18 16:07:09 -05:00
* Decrement a raw value
2014-08-08 15:41:59 -04:00
*
2019-12-18 16:07:09 -05:00
* @ param string $id Cache ID
* @ param int $offset Step / value to reduce by
* @ return mixed New value on success or FALSE on failure
2014-08-08 15:41:59 -04:00
*/
2019-12-18 16:07:09 -05:00
public function decrement ( $id , $offset = 1 )
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
return $this -> { $this -> _adapter } -> decrement ( $this -> key_prefix . $id , $offset );
2014-08-08 15:41:59 -04:00
}
// ------------------------------------------------------------------------
/**
2019-12-18 16:07:09 -05:00
* Clean the cache
2014-08-08 15:41:59 -04:00
*
2019-12-18 16:07:09 -05:00
* @ return bool TRUE on success , FALSE on failure
2014-08-08 15:41:59 -04:00
*/
2019-12-18 16:07:09 -05:00
public function clean ()
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
return $this -> { $this -> _adapter } -> clean ();
2014-08-08 15:41:59 -04:00
}
// ------------------------------------------------------------------------
/**
2019-12-18 16:07:09 -05:00
* Cache Info
2014-08-08 15:41:59 -04:00
*
2019-12-18 16:07:09 -05:00
* @ param string $type = 'user' user / filehits
* @ return mixed array containing cache info on success OR FALSE on failure
2014-08-08 15:41:59 -04:00
*/
2019-12-18 16:07:09 -05:00
public function cache_info ( $type = 'user' )
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
return $this -> { $this -> _adapter } -> cache_info ( $type );
2014-08-08 15:41:59 -04:00
}
// ------------------------------------------------------------------------
/**
2019-12-18 16:07:09 -05:00
* Get Cache Metadata
2014-08-08 15:41:59 -04:00
*
2019-12-18 16:07:09 -05:00
* @ param string $id key to get cache metadata on
* @ return mixed cache item metadata
2014-08-08 15:41:59 -04:00
*/
2019-12-18 16:07:09 -05:00
public function get_metadata ( $id )
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
return $this -> { $this -> _adapter } -> get_metadata ( $this -> key_prefix . $id );
2014-08-08 15:41:59 -04:00
}
// ------------------------------------------------------------------------
/**
2019-12-18 16:07:09 -05:00
* Is the requested driver supported in this environment ?
2014-08-08 15:41:59 -04:00
*
2019-12-18 16:07:09 -05:00
* @ param string $driver The driver to test
* @ return array
2014-08-08 15:41:59 -04:00
*/
2019-12-18 16:07:09 -05:00
public function is_supported ( $driver )
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
static $support ;
2014-08-08 15:41:59 -04:00
2019-12-18 16:07:09 -05:00
if ( ! isset ( $support , $support [ $driver ]))
2014-08-08 15:41:59 -04:00
{
2019-12-18 16:07:09 -05:00
$support [ $driver ] = $this -> { $driver } -> is_supported ();
2014-08-08 15:41:59 -04:00
}
2019-12-18 16:07:09 -05:00
return $support [ $driver ];
2014-08-08 15:41:59 -04:00
}
}