cachePath = PIWIK_USER_PATH . '/tmp/cache/' . $directory . '/'; } /** * Function to fetch a cache entry * * @param string $id The cache entry ID * @return array|bool False on error, or array the cache content */ function get($id) { if(empty($id)) { return false; } $cache_complete = false; $content = ''; // We are assuming that most of the time cache will exists $ok = @include($this->cachePath . $id . '.php'); if ($ok && $cache_complete == true) { return $content; } return false; } /** * A function to store content a cache entry. * * @param string $id The cache entry ID * @param array $content The cache content * @return bool True if the entry was succesfully stored */ function set($id, $content) { if(empty($id)) { return false; } if( !is_dir($this->cachePath)) { Piwik_Common::mkdir($this->cachePath); } if (!is_writable($this->cachePath)) { return false; } $id = $this->cachePath . $id . '.php'; $cache_literal = "<"."?php\n\n"; $cache_literal .= "$"."content = ".var_export($content, true).";\n\n"; $cache_literal .= "$"."cache_complete = true;\n\n"; $cache_literal .= "?".">"; // Write cache to a temp file, then rename it, overwriting the old cache // On *nix systems this should guarantee atomicity $tmp_filename = tempnam($this->cachePath, 'tmp_'); @chmod($tmp_filename, 0640); if ($fp = @fopen($tmp_filename, 'wb')) { @fwrite ($fp, $cache_literal, strlen($cache_literal)); @fclose ($fp); if (!@rename($tmp_filename, $id)) { // On some systems rename() doesn't overwrite destination @unlink($id); if (!@rename($tmp_filename, $id)) { // Make sure that no temporary file is left over // if the destination is not writable @unlink($tmp_filename); } } return true; } return false; } /** * A function to delete a single cache entry * * @param string $id The cache entry ID * @return bool True if the entry was succesfully deleted */ function delete($id) { if(empty($id)) { return false; } $filename = $this->cachePath . $id . '.php'; if (file_exists($filename)) { @unlink ($filename); return true; } return false; } /** * A function to delete all cache entries in the directory */ function deleteAll() { Piwik::unlinkRecursive($this->cachePath, $deleteRootToo = false); } }