Location: PHPKode > scripts > RS Cache > rs-cache/rscache.php
<?php

/*

Copyright 2005 V. Yanson <hide@address.com>

You can freely use this class anywhere as long as you keep this note untouched.

Implementation:

$cache = new cache();
$my_variable = array();
$my_variable['once'] = 1;
$my_variable['two'] = 2;
$my_variable[3] = 'three';
$my_variable['next level'] = array("_one" = 1);

$cache->save(md5("my_variable"), $my_variable);
print_r($cache->get(md5("my_variable")));

*/

class cache
{
	function cache($life = 3600, $dir = "./cache")
	{
		$this->cache_life = $life;
		$this->cacheFolder = $dir;
	}
	
	function save($uid, $value)
	{
		// remove previously saved value
		$dh = opendir($this->cacheFolder);
		while (false !== ($file = readdir($dh)))
		{
			if (preg_match("/\." . $uid . "\.([0-9])*\.txt/", $file))
			{
				unlink($this->cacheFolder . "/" . $file);
			}
		}
		
		// save
		$file = $this->cacheFolder . "/." . $uid . "." . time() . ".txt";
		$fp = fopen($file, "w");
		
		fputs($fp, serialize($value));
		
		fclose($fp);
	}
	
	function get($uid)
	{
		// find the record
		$dh = opendir($this->cacheFolder);
		while (false !== ($file = readdir($dh)))
		{
			if (preg_match("/\." . $uid . "\.([0-9])*\.txt/", $file))
			{
				$exp = explode(".", $file);
				$time = $exp[2];
				
				if ((time() - $time) < $this->cache_life)
				{
					$value = unserialize(file_get_contents($this->cacheFolder . "/" . $file));
				} else {
					// too old. remove it
					unlink($this->cacheFolder . "/" . $file);
					$value = false;
				}
				
				return $value;
				
				// we dont need to search any more
				break;
			}
		}
		
		return false;
	}
	
	function clear()
	{
		// delete everythign from cache folder
		$dh = opendir($this->cacheFolder);
		while (false !== ($file = readdir($dh)))
		{
			if ($file !== "." && $file !== "..")
				unlink($this->cacheFolder . "/" . $file);
		}
	}
}

?>
Return current item: RS Cache