From 81f39c088e8aa2015f5450fb88e11c0b27b4c2e0 Mon Sep 17 00:00:00 2001 From: Klaus Leithoff Date: Wed, 2 Nov 2011 14:59:35 +0000 Subject: [PATCH] fix typo --- phpgwapi/inc/class.egw_cache_files.inc.php | 148 +++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 phpgwapi/inc/class.egw_cache_files.inc.php diff --git a/phpgwapi/inc/class.egw_cache_files.inc.php b/phpgwapi/inc/class.egw_cache_files.inc.php new file mode 100644 index 0000000000..6625b0f6e8 --- /dev/null +++ b/phpgwapi/inc/class.egw_cache_files.inc.php @@ -0,0 +1,148 @@ + + * @copyright (c) 2009 by Ralf Becker + * @version $Id$ + */ + +/** + * Caching provider storing data in files + * + * The provider creates subdirs under a given path + * for each values in $key + */ +class egw_cache_files implements egw_cache_provider +{ + /** + * Extension of file used to store expiration > 0 + */ + const EXPIRATION_EXTENSION = '.expiration'; + + /** + * Path of base-directory for the cache, set via parameter to the constructor or defaults to temp_dir + * + * @var string + */ + protected $base_path; + + /** + * Constructor, eg. opens the connection to the backend + * + * @throws Exception if connection to backend could not be established + * @param array $params eg. array(host,port) or array(directory) depending on the provider + */ + function __construct(array $params) + { + if ($params) + { + $this->base_path = $params[0]; + } + else + { + if(!isset($GLOBALS['egw_info']['server']['temp_dir'])) + { + if (isset($GLOBALS['egw_setup']) && isset($GLOBALS['egw_setup']->db)) + { + $GLOBALS['egw_info']['server']['temp_dir'] = $GLOBALS['egw_setup']->db->select(config::TABLE,'config_value',array( + 'config_app' => 'phpgwapi', + 'config_name' => 'temp_dir', + ),__LINE__,__FILE__)->fetchColumn(); + } + if (!$GLOBALS['egw_info']['server']['temp_dir']) + { + throw new Exception (__METHOD__."() server/temp_dir is NOT set!"); + } + } + $this->base_path = $GLOBALS['egw_info']['server']['temp_dir'].'/egw_cache'; + } + if (!isset($this->base_path) || !file_exists($this->base_path) && !mkdir($this->base_path,0700,true)) + { + throw new Exception (__METHOD__."() can't create basepath $this->base_path!"); + } + } + + /** + * Stores some data in the cache + * + * @param array $keys eg. array($level,$app,$location) + * @param mixed $data + * @param int $expiration=0 + * @return boolean true on success, false on error + */ + function set(array $keys,$data,$expiration=0) + { + if ($ret = @file_put_contents($fname=$this->filename($keys,true),serialize($data),LOCK_EX) > 0) + { + if ((int)$expiration > 0) file_put_contents($fname.self::EXPIRATION_EXTENSION,(string)$expiration); + } + return $ret; + } + + /** + * Get some data from the cache + * + * @param array $keys eg. array($level,$app,$location) + * @return mixed data stored or NULL if not found in cache + */ + function get(array $keys) + { + if (!file_exists($fname = $this->filename($keys))) + { + return null; + } + if (file_exists($fname_expiration=$fname.self::EXPIRATION_EXTENSION) && + ($expiration = (int)file_get_contents($fname_expiration)) && + filemtime($fname) < time()-$expiration) + { + unlink($fname); + unlink($fname_expiration); + return null; + } + return unserialize(file_get_contents($fname)); + } + + /** + * Delete some data from the cache + * + * @param array $keys eg. array($level,$app,$location) + * @return boolean true on success, false on error (eg. $key not set) + */ + function delete(array $keys) + { + if (!file_exists($fname = $this->filename($keys))) + { + //error_log(__METHOD__.'('.array2string($keys).") file_exists('$fname') == FALSE!"); + return false; + } + if (file_exists($fname_expiration=$fname.self::EXPIRATION_EXTENSION)) + { + unlink($fname_expiration); + } + //error_log(__METHOD__.'('.array2string($keys).") calling unlink('$fname')"); + return unlink($fname); + } + + /** + * Create a path from $keys and $basepath + * + * @param array $keys + * @param boolean $mkdir=false should we create the directory + * @return string + */ + private function filename(array $keys,$mkdir=false) + { + $fname = $this->base_path.'/'.str_replace(array(':','*'),'-',implode('/',$keys)); + + if ($mkdir && !file_exists($dirname=dirname($fname))) + { + @mkdir($dirname,0700,true); + } + return $fname; + } +}