diff options
author | Christopher Smith <chris@jalakai.co.uk> | 2014-03-16 18:32:07 +0000 |
---|---|---|
committer | Christopher Smith <chris@jalakai.co.uk> | 2014-03-16 18:32:07 +0000 |
commit | b23560022e3a99310a04296b3c385325e7abb747 (patch) | |
tree | ca5e0ea0022149cec5cbd6036df9125b4589f59c /inc | |
parent | 1359eacbdbff842b241a85ea274a00982fec9267 (diff) | |
download | rpg-b23560022e3a99310a04296b3c385325e7abb747.tar.gz rpg-b23560022e3a99310a04296b3c385325e7abb747.tar.bz2 |
Fix longstanding issue with cache class & cachetime setting
1. cachetime setting should only be applied to the cache_renderer
class. Previously it was applied to cache_parser (and by
extension cache_handler).
2. two special cachetime values, -1 & 0, weren't handled, per
FS#2183
To handle the cachetime setting, -1, disable caching, a new
property _nocache is added. When that property is true, any cache
file must not be used and storecache() should not store any values
Diffstat (limited to 'inc')
-rw-r--r-- | inc/cache.php | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/inc/cache.php b/inc/cache.php index 56c5b65f2..7a66049f4 100644 --- a/inc/cache.php +++ b/inc/cache.php @@ -16,10 +16,11 @@ class cache { public $ext = ''; // file ext for cache data, secondary identifier for this item public $cache = ''; // cache file name public $depends = array(); // array containing cache dependency information, - // used by _useCache to determine cache validity + // used by _useCache to determine cache validity var $_event = ''; // event to be triggered during useCache var $_time; + var $_nocache = false; // if set to true, cache will not be used or stored /** * @param string $key primary identifier @@ -34,7 +35,7 @@ class cache { /** * public method to determine whether the cache can be used * - * to assist in cetralisation of event triggering and calculation of cache statistics, + * to assist in centralisation of event triggering and calculation of cache statistics, * don't override this function override _useCache() * * @param array $depends array of cache dependencies, support dependecies: @@ -71,6 +72,7 @@ class cache { */ public function _useCache() { + if ($this->_nocache) return false; // caching turned off if (!empty($this->depends['purge'])) return false; // purge requested? if (!($this->_time = @filemtime($this->cache))) return false; // cache exists? @@ -115,6 +117,8 @@ class cache { * @return bool true on success, false otherwise */ public function storeCache($data) { + if ($this->_nocache) return false; + return io_savefile($this->cache, $data); } @@ -203,10 +207,6 @@ class cache_parser extends cache { } protected function _addDependencies() { - global $conf; - - $this->depends['age'] = isset($this->depends['age']) ? - min($this->depends['age'],$conf['cachetime']) : $conf['cachetime']; // parser cache file dependencies ... $files = array($this->file, // ... source @@ -265,6 +265,18 @@ class cache_renderer extends cache_parser { } protected function _addDependencies() { + global $conf; + + // default renderer cache file 'age' is dependent on 'cachetime' setting, two special values: + // -1 : do not cache (should not be overridden) + // 0 : cache never expires (can be overridden) - no need to set depends['age'] + if ($conf['cachetime'] == -1) { + $this->_nocache = true; + return; + } elseif ($conf['cachetime'] > 0) { + $this->depends['age'] = isset($this->depends['age']) ? + min($this->depends['age'],$conf['cachetime']) : $conf['cachetime']; + } // renderer cache file dependencies ... $files = array( @@ -317,6 +329,8 @@ class cache_instructions extends cache_parser { * @return bool true on success, false otherwise */ public function storeCache($instructions) { + if ($this->_nocache) return false; + return io_savefile($this->cache,serialize($instructions)); } } |