The Cache Files need to be reduced for the xoops_data folder, this is quite easy to do some example basic work around routines are included here to be worked into XoopsCache::read(), XoopsCache::write() & XoopsCache::delete().
XoopsCache::read() in class/cache/file.phple="color: #000000"><?php /** * Read a key from the cache * * @param string $key Identifier for the data * @return mixed The cached data, or false if the data doesn't exist, has expired, or if there was an error fetching it * @access public */ function read($key) { $fingerprint = md5(implode('',array_reverse(explode("_",$key))); if ($this->setKey(sha1(substr($fingerprint,0,2))) === false || ! $this->init) { return false; } if ($this->settings['lock']) { $this->file->lock = true; } $data = $this->file->read(true); if (!empty($data) && !empty($this->settings['serialize'])) { $data = stripslashes($data); $data = preg_replace('!s:(d+):"(.*?)";!se', "'s:'.strlen('$2').':"$2";'", $data); $data = unserialize($data); if (is_array($data)) { XoopsLoad::load('XoopsUtility'); $data = XoopsUtility::recursive('stripslashes', $data); } } else if ($data && empty($this->settings['serialize'])) { $data = eval($data); } $unset = false; foreach($data['keys'] as $kiy => $cachetime) { if ($cachetime !== false && intval($cachetime) < time()) { unset($data['values'][$kiy]); unset($data['keys'][$kiy]); $unset = true; } } $this->file->close(); return !empty($data['values'][$key])?$data['values'][$key]:false; }
XoopsCache::write() in class/cache/file.phple="color: #000000"><?php /** * Write data for key into cache * * @param string $key Identifier for the data * @param mixed $data Data to be cached * @param mixed $duration How long to cache the data, in seconds * @return boolean True if the data was successfully cached, false on failure * @access public */ function write($key, $values = null, $duration = null) { if (!isset($data) || ! $this->init) { return false; } $fingerprint = md5(implode('',array_reverse(explode("_",$key))); if ($this->setKey(sha1(substr($fingerprint,0,2))) === false || ! $this->init) { return false; } if ($duration == null) { $duration = $this->settings['duration']; } $data = $this->file->read(true); if (!empty($data) && !empty($this->settings['serialize'])) { $data = stripslashes($data); $data = preg_replace('!s:(d+):"(.*?)";!se', "'s:'.strlen('$2').':"$2";'", $data); $data = unserialize($data); if (is_array($data)) { XoopsLoad::load('XoopsUtility'); $data = XoopsUtility::recursive('stripslashes', $data); } } else if ($data && empty($this->settings['serialize'])) { $data = eval($data); } foreach($data['keys'] as $kiy => $cachetime) { if ($cachetime !== false && intval($cachetime) < time()) { unset($data['values'][$kiy]); unset($data['keys'][$kiy]); } } $data['keys'][$key] = $expires = time() + $duration; $data['values'][$key] = $values; $windows = false; $lineBreak = "n"; if (substr(PHP_OS, 0, 3) == "WIN") { $lineBreak = "rn"; $windows = true; } ; if (!empty($this->settings['serialize'])) { if ($windows) { $data = str_replace('\', '\\\\', serialize($data)); } else { $data = serialize($data); } $contents = $data . $lineBreak; } else { $contents = "return " . var_export($data, true) . ";" . $lineBreak; } if ($this->settings['lock']) { $this->file->lock = true; } $success = $this->file->write($contents); $this->file->close(); return $success; }
XoopsCache::delete() in class/cache/file.phple="color: #000000"><?php /** * Delete a key from the cache * * @param string $key Identifier for the data * @return boolean True if the value was successfully deleted, false if it didn't exist or couldn't be removed * @access public */ function delete($key) { $fingerprint = md5(implode('',array_reverse(explode("_",$key))); if ($this->setKey(sha1(substr($fingerprint,0,2))) === false || ! $this->init) { return false; } if ($this->settings['lock']) { $this->file->lock = true; } $data = $this->file->read(true); if (!empty($data) && !empty($this->settings['serialize'])) { $data = stripslashes($data); $data = preg_replace('!s:(d+):"(.*?)";!se', "'s:'.strlen('$2').':"$2";'", $data); $data = unserialize($data); if (is_array($data)) { XoopsLoad::load('XoopsUtility'); $data = XoopsUtility::recursive('stripslashes', $data); } } else if ($data && empty($this->settings['serialize'])) { $data = eval($data); } $unset = false; foreach($data['keys'] as $kiy => $cachetime) { if ($cachetime !== false && intval($cachetime) < time()) { unset($data['values'][$kiy]); unset($data['keys'][$kiy]); $unset = true; } } unset($data['values'][$key]); unset($data['keys'][$key]); $windows = false; $lineBreak = "n"; if (substr(PHP_OS, 0, 3) == "WIN") { $lineBreak = "rn"; $windows = true; } ; if (!empty($this->settings['serialize'])) { if ($windows) { $data = str_replace('\', '\\\\', serialize($data)); } else { $data = serialize($data); } $contents = $data . $lineBreak; } else { $contents = "return " . var_export($data, true) . ";" . $lineBreak; } if ($this->settings['lock']) { $this->file->lock = true; } $success = $this->file->write($contents); $this->file->close(); return true; }