X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=inc%2Fclasses%2Fcachesystem.class.php;h=e19c9e8f7809b23227a70d7e60cc5602e3f50b36;hb=d92d8b4ddd219b65df8e0bba5e4354c0bbfba5c9;hp=61a6fe31458002ceeb7b05dd936df47e39297add;hpb=64c8349613addc3da2242c5cd6b99d64e3fb5f8e;p=mailer.git diff --git a/inc/classes/cachesystem.class.php b/inc/classes/cachesystem.class.php index 61a6fe3145..e19c9e8f78 100644 --- a/inc/classes/cachesystem.class.php +++ b/inc/classes/cachesystem.class.php @@ -101,7 +101,7 @@ class CacheSystem { // Pre-fetch cache here if found if ($this->isCacheReadable()) $this->getArrayFromCache(); - //* DEBUG: */ print($cacheName.'='.intval($this->isCacheReadable()).'/'.(is_writeable($this->fqfn)).'/'.($this->extensionVersionMatches('cache')).'
'); + //* DEBUG: */ print($cacheName.'='.intval($this->isCacheReadable()).'/'.intval(is_writeable($this->fqfn)).'/'.intval($this->extensionVersionMatches('cache')).'
'); $this->status[$cacheName] = ($this->isCacheReadable() && (is_writeable($this->fqfn)) && ($this->extensionVersionMatches('cache'))); } // END - if //* DEBUG: */ print($cacheName.'='.intval($this->status[$cacheName]).'
'); @@ -114,9 +114,8 @@ class CacheSystem { function init () { // This will destory an existing cache file! if ($this->ret == $this->statusDone) { - // Mark it as no longer readable - unset($this->readable[$this->name]); - unset($GLOBALS['file_readable'][$this->fqfn]); + // Reset read status + $this->resetCacheReadStatus(); // Create file if ($this->isCacheReadable()) changeMode($this->fqfn, 0666); @@ -130,6 +129,13 @@ class CacheSystem { } } + // Reset the read status + function resetCacheReadStatus () { + unset($this->readable[$this->name]); + unset($GLOBALS['file_readable'][$this->fqfn]); + unset($this->status[$this->name]); + } + function addRow ($data) { // Is the pointe rvalid? if (is_resource($this->pointer)) { @@ -148,11 +154,51 @@ class CacheSystem { } elseif (is_array($v)) { // Serialize and BASE64-encode the array $v = base64_encode(serialize($v)); + } elseif ($this->name == 'config') { + // Configuration + $GLOBALS['cache_array']['config'][$data['config']][$k] = $v; + } elseif ($this->name == 'filter') { + // Filter + $GLOBALS['cache_array']['filter']['chains'][$data['filter_name']][$data['filter_function']] = $data['filter_active']; + $GLOBALS['cache_array']['filter']['counter'][$data['filter_name']][$data['filter_function']] = $data['filter_counter']; + $GLOBALS['cache_array']['filter']['loaded'][$data['filter_name']][$data['filter_function']] = true; + } elseif ($this->name == 'modules') { + // Modules + $GLOBALS['cache_array']['modules'][$k][$data['module']] = $v; + } elseif ($this->name == 'admin') { + // Modules + if ($k == 'login') { + $GLOBALS['cache_array']['admin'][$k][$data['admin_id']] = $v; + } else { + $GLOBALS['cache_array']['admin'][$k][$data['login']] = $v; + } + } elseif ($this->name == 'refdepths') { + // Referal levels + $GLOBALS['cache_array']['refdepths'][$k][$data['id']] = $v; + } elseif ($this->name == 'revision') { + // Revision data + $GLOBALS['cache_array']['revision'][$k] = $v; + } elseif ($this->name == 'themes') { + // Themes + if ($k == 'theme_path') { + $GLOBALS['cache_array']['themes'][$k][$data['id']] = $v; + } else { + $GLOBALS['cache_array']['themes'][$k][$data['theme_path']] = $v; + } + } else { + // Finialize the cache and close it + $this->finialize(); + + // Remove cache + $this->removeCacheFile(true); + + // Unsupported cache found! + debug_report_bug('Unsupported cache ' . $this->name . ' detected.'); } // Write cache line to file fwrite($this->pointer, $this->rewriteEntry($k, $v)); - } + } // END - foreach } else { // Cannot create file addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMessage('CACHE_PROBLEMS_DETECTED')); @@ -171,6 +217,9 @@ class CacheSystem { // Close file add destroy handler fclose($this->pointer); + // Reset readable status + $this->resetCacheReadStatus(); + // Set rights if ($this->isCacheReadable()) changeMode($this->fqfn, 0666); @@ -216,12 +265,22 @@ class CacheSystem { } // END - if } else { // Cache file not found or not readable + debug_report_bug($this->name); addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".sprintf(getMessage('CACHE_CANNOT_LOAD'), $this->fqfn)); + + // Try to remove it + $this->removeCacheFile(); } + + // Always return an empty array if we have trouble or no data + return array(); } // Destroy an existing cache file - function removeCacheFile ($removeArray = false, $force = false) { + function removeCacheFile ($force = false) { + // Reset read status + $this->resetCacheReadStatus(); + // Debug message /* DEBUG: */ logDebugMessage(__METHOD__, __LINE__, sprintf("%s should be removed.", $this->name)); @@ -251,20 +310,8 @@ class CacheSystem { // Remove cache file from system removeFile($this->fqfn); - // No longer readable! - unset($this->readable[$this->name]); - - // Shall we remove the array from memory? - if ($removeArray === true) { - // Debug message if allowed - if (isDebugModeEnabled()) { - // Debug message - logDebugMessage(__METHOD__, __LINE__, 'removing array!'); - } // END - if - - // Remove it from memory - unset($GLOBALS['cache_array'][$this->name]); - } // END - if + // Reset read status + $this->resetCacheReadStatus(); // Is the file there? if (!$this->isCacheReadable()) { @@ -411,7 +458,7 @@ class CacheSystem { logDebugMessage(__METHOD__, __LINE__, "Cache {$this->name} has missing version entry for extension {$ext_name}! Purging cache..."); // Remove the cache file - $this->removeCacheFile(false, true); + $this->removeCacheFile(true); } } else { // Not installed, does always match