| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- <?php
- /* vim: set expandtab tabstop=4 shiftwidth=4: */
- // +----------------------------------------------------------------------+
- // | PHP version 4.0 |
- // +----------------------------------------------------------------------+
- // | Copyright (c) 2002 Active Fish Group |
- // +----------------------------------------------------------------------+
- // | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk> |
- // +----------------------------------------------------------------------+
- //
- // $Id: cache.php 1434 2006-10-29 02:33:41Z b4rt $
- /**
- * Class uses all of vlibTemplate's functionality but caches the template files.
- * It creates an identical tree structure to your filesystem but with cached files.
- *
- * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
- * @since 22/02/2002
- * @package vLIB
- * @access public
- */
- class vlibTemplateCache extends vlibTemplate {
- /*-----------------------------------------------------------------------------\
- | DO NOT TOUCH ANYTHING IN THIS CLASS, IT MAY NOT WORK OTHERWISE |
- \-----------------------------------------------------------------------------*/
- var $_cache = 1; // tells vlibTemplate that we're caching
- var $_cachefile; // full path to current cache file (even if it doesn't yet exist)
- var $_cacheexists; // has this file been cached before
- var $_cachefilelocked; // is this file currently locked whilst writing
- var $_cachefiledir; // dir of current cache file
- var $_clearcache = 0;
- /**
- * FUNCTION: clearCache
- * will unset a file, and set $this->_cacheexists to 0.
- *
- * @access public
- * @return boolean
- */
- function clearCache() {
- $this->_clearcache = 1;
- return true;
- }
- /**
- * FUNCTION: recache
- * alias for clearCache().
- *
- * @access public
- * @return boolean
- */
- function recache() {
- return $this->clearCache();
- }
- /**
- * FUNCTION: setCacheLifeTime
- * sets the lifetime of the cached file
- *
- * @param int $int number of seconds to set lifetime to
- * @access public
- * @return boolean
- */
- function setCacheLifeTime($int = null) {
- if ($int == null || !is_int($int)) return false;
- if ($int == 0) $int = 60;
- if ($int == -1) $int = 157680000; // set to 5 yrs time
- $this->OPTIONS['CACHE_LIFETIME'] = $int;
- return true;
- }
- /**
- * FUNCTION: setCacheExtension
- * sets the extention of the cache file
- *
- * @param str $str name of new cache extention
- * @access public
- * @return boolean
- */
- function setCacheExtension($str = null) {
- if ($str == null || !preg_match('/^[a-z0-9]+$/', strtolower($str))) return false;
- $this->OPTIONS['CACHE_EXTENSION'] = strtolower($str);
- return true;
- }
- /*----------------------------------------\
- Private Functions
- -----------------------------------------*/
- /**
- * FUNCTION: _checkCache
- * checks if there's a cache, if there is then it will read the cache file as the template.
- */
- function _checkCache ($tmplfile) {
- $this->_cachefile = $this->_getFilename($tmplfile);
- if ($this->_clearcache) {
- if (file_exists($this->_cachefile)) unlink($this->_cachefile);
- return false;
- }
- if (file_exists($this->_cachefile) && is_readable($this->_cachefile)) {
- $this->_cacheexists = 1;
- // if it's expired
- if ((filemtime($this->_cachefile) + $this->OPTIONS['CACHE_LIFETIME']) < date ('U')
- || filemtime($this->_cachefile) < filemtime($tmplfile)) {
- $this->_cacheexists = 0;
- return false; // so that we know to recache
- }
- else {
- return true;
- }
- } else {
- $this->_cacheexists = 0;
- return false;
- }
- }
- /**
- * FUNCTION: _getFilename
- * gets the full pathname for the cached file
- *
- */
- function _getFilename($tmplfile) {
- return $this->OPTIONS['CACHE_DIRECTORY'].'/'.md5('vlibCachestaR'.realpath($tmplfile)).'.'.$this->OPTIONS['CACHE_EXTENSION'];
- }
- /**
- * FUNCTION: _createCache
- * creates the cached file
- *
- */
- function _createCache($data) {
- $cache_file = $this->_cachefile;
- if(!$this->_prepareDirs($cache_file)) return false; // prepare all of the directories
- $f = fopen ($cache_file, "w");
- flock($f, 2); // set an EXclusive lock
- if (!$f) vlibTemplateError::raiseError('VT_ERROR_NO_CACHE_WRITE',KILL,$cache_file);
- fputs ($f, $data); // write the parsed string from vlibTemplate
- flock($f, 3); // UNlock file
- fclose ($f);
- touch ($cache_file);
- return true;
- }
- /**
- * FUNCTION: _prepareDirs
- * prepares the directory structure
- *
- */
- function _prepareDirs($file) {
- if (empty($file)) die('no filename'); //do error in future
- $filepath = dirname($file);
- if (is_dir($filepath)) return true;
- $dirs = preg_split('[\\/]', $filepath);
- $currpath = "";
- foreach ($dirs as $dir) {
- $currpath .= $dir .'/';
- $type = @filetype($currpath);
- ($type=='link') and $type = 'dir';
- if ($type != 'dir' && $type != false && !empty($type)) {
- vlibTemplateError::raiseError('VT_ERROR_WRONG_CACHE_TYPE',KILL,'directory: '.$currpath.', type: '.$type);
- }
- if ($type == 'dir') {
- continue;
- }
- else {
- $s = @mkdir($currpath, 0775);
- if (!$s) vlibTemplateError::raiseError('VT_ERROR_CACHE_MKDIR_FAILURE',KILL,'directory: '.$currpath);
- }
- }
- return true;
- }
- } // -- end vlibTemplateCache class
- ?>
|