X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fcachesystem.class.php;h=78b72f81017dc84af55ad833c3fd5732a747fc0c;hb=26ea563a90454a2cde58f8cd134542a0d8f14780;hp=6a1992dd9d371e5145304a1a3ad7473df0a69a54;hpb=ab82613b0100336c0966a742c986874ec1692672;p=mailer.git diff --git a/inc/classes/cachesystem.class.php b/inc/classes/cachesystem.class.php index 6a1992dd9d..78b72f8101 100644 --- a/inc/classes/cachesystem.class.php +++ b/inc/classes/cachesystem.class.php @@ -65,26 +65,14 @@ class CacheSystem { // Check if path exists if (isDirectory(getConfig('CACHE_PATH'))) { - // Make FQFN for dummy file - $FQFN = getConfig('CACHE_PATH') . 'dummy.tmp'; - - // Check if we can create a file inside the path - touch($FQFN, 'w'); - - // Is the file there? - if (isFileReadable($FQFN)) { - // Yes, we can do. So let's remove it - removeFile($FQFN); - - // Is there a .htaccess file? - if (isFileReadable(getConfig('CACHE_PATH') . '.htaccess')) { - // All done! - $this->ret = $this->statusDone; - } else { - // Stop! Set a .htaccess file first - $this->ret = 'htaccess'; - } - } // END - if + // Is there a .htaccess file? + if (isFileReadable(getConfig('CACHE_PATH') . '.htaccess')) { + // All done! + $this->ret = $this->statusDone; + } else { + // Stop! Set a .htaccess file first + $this->ret = 'htaccess'; + } } // END - if } @@ -101,7 +89,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,8 +102,8 @@ class CacheSystem { function init () { // This will destory an existing cache file! if ($this->ret == $this->statusDone) { - // Mark it as no longer readable - $this->markCacheAsUnreadable(); + // Reset read status + $this->resetCacheReadStatus(); // Create file if ($this->isCacheReadable()) changeMode($this->fqfn, 0666); @@ -129,10 +117,11 @@ class CacheSystem { } } - // Mark the cache as unreadable - function markCacheAsUnreadable () { + // 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) { @@ -153,11 +142,54 @@ 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 == 'refsystem') { + // Referal system + $GLOBALS['cache_array']['refsystem'][$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->finalize(); + + // 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')); @@ -176,6 +208,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); @@ -221,17 +256,21 @@ 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) { - // Remove cached value of readable cache - $this->markCacheAsUnreadable(); + function removeCacheFile ($force = false) { + // Reset read status + $this->resetCacheReadStatus(); // Debug message /* DEBUG: */ logDebugMessage(__METHOD__, __LINE__, sprintf("%s should be removed.", $this->name)); @@ -262,17 +301,8 @@ class CacheSystem { // Remove cache file from system removeFile($this->fqfn); - // 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()) { @@ -419,7 +449,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