diff options
Diffstat (limited to 'pear/Cache.php')
-rw-r--r-- | pear/Cache.php | 355 |
1 files changed, 0 insertions, 355 deletions
diff --git a/pear/Cache.php b/pear/Cache.php deleted file mode 100644 index 7338bd8939..0000000000 --- a/pear/Cache.php +++ /dev/null @@ -1,355 +0,0 @@ -<?php -// +----------------------------------------------------------------------+ -// | PHP version 4.0 | -// +----------------------------------------------------------------------+ -// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | -// +----------------------------------------------------------------------+ -// | This source file is subject to version 2.0 of the PHP license, | -// | that is bundled with this package in the file LICENSE, and is | -// | available at through the world-wide-web at | -// | http://www.php.net/license/2_02.txt. | -// | If you did not receive a copy of the PHP license and are unable to | -// | obtain it through the world-wide-web, please send a note to | -// | license@php.net so we can mail you a copy immediately. | -// +----------------------------------------------------------------------+ -// | Authors: Ulf Wendel <ulf.wendel@phpdoc.de> | -// | Sebastian Bergmann <sb@sebastian-bergmann.de> | -// +----------------------------------------------------------------------+ -// -// $Id$ - -require_once "Cache/Error.php"; - -/** -* Cache is a base class for cache implementations. -* -* The pear cache module is a generic data cache which can be used to -* cache script runs. The idea behind the cache is quite simple. If you have -* the same input parameters for whatever tasks/algorithm you use you'll -* usually get the same output. So why not caching templates, functions calls, -* graphic generation etc. Caching certain actions e.g. XSLT tranformations -* saves you lots of time. -* -* The design of the cache reminds of PHPLibs session implementation. A -* (PHPLib: session) controller uses storage container (PHPLib: ct_*.inc) to save -* certain data (PHPLib: session data). In contrast to the session stuff it's up to -* you to generate an ID for the data to cache. If you're using the output cache -* you might use the script name as a seed for cache::generateID(), if your using the -* function cache you'd use an array with all function parameters. -* -* Usage example of the generic data cache: -* -* require_once("Cache.php"); -* -* $cache = new Cache("file", array("cache_dir" => "cache/") ); -* $id = $cache->generateID("testentry"); -* -* if ($data = $cache->get($id)) { -* print "Cache hit.<br>Data: $data"; -* -* } else { -* $data = "data of any kind"; -* $cache->save($id, $data); -* print "Cache miss.<br>"; -* } -* -* WARNING: No File/DB-Table-Row locking is implemented yet, -* it's possible, that you get corrupted data-entries under -* bad circumstances (especially with the file container) -* -* @author Ulf Wendel <ulf.wendel@phpdoc.de> -* @version $Id$ -* @package Cache -* @access public -*/ -class Cache extends PEAR { - - /** - * Enables / disables caching. - * - * TODO: Add explanation what this is good for. - * - * @var boolean - * @access private - */ - var $caching = true; - - /** - * Garbage collection: probability in seconds - * - * If set to a value above 0 a garbage collection will - * flush all cache entries older than the specified number - * of seconds. - * - * @var integer - * @see $gc_probability, $gc_maxlifetime - * @access public - */ - var $gc_time = 1; - - /** - * Garbage collection: probability in percent - * - * TODO: Add an explanation. - * - * @var integer 0 => never - * @see $gc_time, $gc_maxlifetime - * @access public - */ - var $gc_probability = 1; - - /** - * Garbage collection: delete all entries not use for n seconds. - * - * Default is one day, 60 * 60 * 24 = 86400 seconds. - * - * @var integer - * @see $gc_probability, $gc_time - */ - var $gc_maxlifetime = 86400; - - /** - * Storage container object. - * - * @var object Cache_Container - */ - var $container; - - // - // public methods - // - - /** - * - * @param string Name of storage container class - * @param array Array with storage class dependend config options - */ - function Cache($storage_driver, $storage_options = "") - { - $this->PEAR(); - $storage_driver = strtolower($storage_driver); - $storage_class = 'Cache_Container_' . $storage_driver; - $storage_classfile = 'Cache/Container/' . $storage_driver . '.php'; - - include_once $storage_classfile; - $this->container = new $storage_class($storage_options); - } - - //deconstructor - function _Cache() - { - $this->garbageCollection(); - } - - /** - * Returns the current caching state. - * - * @return boolean The current caching state. - * @access public - */ - function getCaching() - { - return ($this->caching); - } - - /** - * Enables or disables caching. - * - * @param boolean The new caching state. - * @access public - */ - function setCaching($state) - { - $this->caching = $state; - } - - /** - * Returns the requested dataset it if exists and is not expired - * - * @param string dataset ID - * @param string cache group - * @return mixed cached data or NULL on failure - * @access public - */ - function get($id, $group = "default") { - if (!$this->caching) - return ""; - - if ($this->isCached($id, $group) && !$this->isExpired($id, $group)) - return $this->load($id, $group); - - return NULL; - } // end func get - - /** - * Stores the given data in the cache. - * - * @param string dataset ID used as cache identifier - * @param mixed data to cache - * @param integer lifetime of the cached data in seconds - 0 for endless - * @param string cache group - * @return boolean - * @access public - */ - function save($id, $data, $expires = 0, $group = "default") { - if (!$this->caching) - return true; - - return $this->extSave($id, $data, "",$expires, $group); - } // end func save - - /** - * Stores a dataset without additional userdefined data. - * - * @param string dataset ID - * @param mixed data to store - * @param string additional userdefined data - * @param mixed userdefined expire date - * @param string cache group - * @return boolean - * @throws Cache_Error - * @access public - * @see getUserdata() - */ - function extSave($id, $cachedata, $userdata, $expires = 0, $group = "default") { - if (!$this->caching) - return true; - - return $this->container->save($id, $cachedata, $expires, $group, $userdata); - } // end func extSave - - /** - * Loads the given ID from the cache. - * - * @param string dataset ID - * @param string cache group - * @return mixed cached data or NULL on failure - * @access public - */ - function load($id, $group = "default") { - if (!$this->caching) - return ""; - - return $this->container->load($id, $group); - } // end func load - - /** - * Returns the userdata field of a cached data set. - * - * @param string dataset ID - * @param string cache group - * @return string userdata - * @access public - * @see extSave() - */ - function getUserdata($id, $group = "default") { - if (!$this->caching) - return ""; - - return $this->container->getUserdata($id, $group); - } // end func getUserdata - - /** - * Removes the specified dataset from the cache. - * - * @param string dataset ID - * @param string cache group - * @return boolean - * @access public - */ - function delete($id, $group = "default") { - if (!$this->caching) - return true; - - return $this->container->delete($id, $group); - } // end func delete - - /** - * Flushes the cache - removes all data from it - * - * @param string cache group, if empty all groups will be flashed - * @return integer number of removed datasets - */ - function flush($group = "") { - if (!$this->caching) - return true; - - return $this->container->flush($group); - } // end func flush - - /** - * Checks if a dataset exists. - * - * Note: this does not say that the cached data is not expired! - * - * @param string dataset ID - * @param string cache group - * @return boolean - * @access public - */ - function isCached($id, $group = "default") { - if (!$this->caching) - return false; - - return $this->container->isCached($id, $group); - } // end func isCached - - /** - * Checks if a dataset is expired - * - * @param string dataset ID - * @param string cache group - * @param integer maximum age for the cached data in seconds - 0 for endless - * If the cached data is older but the given lifetime it will - * be removed from the cache. You don't have to provide this - * argument if you call isExpired(). Every dataset knows - * it's expire date and will be removed automatically. Use - * this only if you know what you're doing... - * @return boolean - * @access public - */ - function isExpired($id, $group = "default", $max_age = 0) { - if (!$this->caching) - return true; - - return $this->container->isExpired($id, $group, $max_age); - } // end func isExpired - - /** - * Generates a "unique" ID for the given value - * - * This is a quick but dirty hack to get a "unique" ID for a any kind of variable. - * ID clashes might occur from time to time although they are extreme unlikely! - * - * @param mixed variable to generate a ID for - * @return string "unique" ID - * @access public - */ - function generateID($variable) { - // WARNING: ID clashes are possible although unlikely - return md5(serialize($variable)); - } - - /** - * Calls the garbage collector of the storage object with a certain probability - * - * @param boolean Force a garbage collection run? - * @see $gc_probability, $gc_time - */ - function garbageCollection($force = false) { - static $last_run = 0; - - if (!$this->caching) - return; - - srand((double) microtime() * 1000000); - - // time and probability based - if (($force) || ($last_run && $last_run < time() + $this->gc_time) || (rand(1, 100) < $this->gc_probability)) { - $this->container->garbageCollection($this->gc_maxlifetime); - $last_run = time(); - } - } // end func garbageCollection - -} // end class cache -?> |