<?
/*
questions, contact me:
dietrich ayala
 [email protected]
todo:
* add expiration functionality - a time/date var that indicates a maximum age for a cache_file
* actually benchmark the class. see how much it decreases script execution time
my *basic* performance test:
	(benchmarked with Dirks Webstress - http://www.paessler.com)
	server: pentiumII 400 256mb RAM
	webserver: apache 1.3.12
	php: version 4.02 w/ Zend Optimizer
	mysql: version 3.21.33b
	
	script: hit mysql once for 700 rows of 12 fields each
	and formatted results into nested tables, one per row.
	
	
	avg request time w/o caching:
	880 milleseconds
	avg request time w/ caching:
	594 milleseconds
usage:
$cache = new cache;
$args = array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
$args[] = $PHP_SELF;
$buffer = $cache->check_cache($args);
if(!$buffer){
	// normal script execution here
	// but instead of printing, load all
	// output into a buffer var ($buffer).
	// load buffer var into cache file
	if(!$cache->set_cache($buffer)){
		print "couldn't create cache file";
	}
}
print $buffer;
*/
class cache {
	function cache(){
		$this->cache_name = "";
		$this->debug_flag = true;
		$this->cache_dir = "/home/www/scripts/cache";
	}
	
	function check_cache($args){
		if($args["PHPSESSID"]){
			$this->debug("found a session id");
			unset($args["PHPSESSID"]);
		}
		
		$this->cache_name = strtolower(ereg_replace("[\"\'\-\;\:\,\\\/]","_",str_replace(" ","",join("_",$args)))).".cache";
		$this->debug("cache_name: $this->cache_name");
		clearstatcache();
		if(file_exists("$this->cache_dir/$this->cache_name")){
			$this->debug("and cache file exists!");
			return join("",file("$this->cache_dir/$this->cache_name"));
		}
		return false;
	}
	
	function set_cache($buffer){
		// write buffer to cache file
		if($fp = @fopen("$this->cache_dir/$this->cache_name","w")){
			fputs($fp,$buffer);
			fclose($fp);
			if(!$cache = fopen("$this->cache_dir/$this->cache_name","r")){
				return false;
			}
		}
		return true;
	}
	
	function debug($string){
		if($this->debug_flag == true){
			print "$string<br>";
		}
	}
}
?> 
  |