Cache Class for PHP

Just another php cache class that you can find in Internet..

The difference? super easy to use ;)

Usage:
Initialize:

$cache = new Cache();

Set expire time (by default 3600 seconds)

$cache = new Cache(15);

Set the path (by default “cache/”)

$cache = new Cache(120,"/any_other_path/");

Read a “Key”:

$value = $cache->get("some_data");

Write a “Key”:

$cache->put("some_data", "some_value");

Full example to cache a query:

$cache = new Cache();
$values = $cache->get($query);//setting values from cache
 
if ($values==false) {	//not value from cache found
	$result=mysql_query($query);
	if (mysql_num_rows($result)>0){//checking if there's more than one result
		while($row = mysql_fetch_assoc($result))  array_push($values, $row);  //feed array
		$cache->put($query, $values);	//save cache			
	}
}		
print_r($values);

The Class:

class Cache {
	private $cache_path;//path for the cache
	private $cache_expire;//seconds that the cache expires
 
	//cache constructor, optional expiring time and cache path
	public function Cache($exp_time=3600,$path="cache/"){
		$this->cache_expire=$exp_time;
		$this->cache_path=$path;
	}
 
	//returns the filename for the cache
	private function fileName($key){
		return $this->cache_path.md5($key);
	}
 
	//creates new cache files with the given data, $key== name of the cache, data the info/values to store
	public function put($key, $data){
		$values = serialize($data);
		$filename = $this->fileName($key);
		$file = fopen($filename, 'w');
	    if ($file){//able to create the file
	        fwrite($file, $values);
	        fclose($file);
	    }
	    else return false;
	}
 
	//returns cache for the given key
	public function get($key){
		$filename = $this->fileName($key);
		if (!file_exists($filename) || !is_readable($filename)){//can't read the cache
			return false;
		}
		if ( time() < (filemtime($filename) + $this->cache_expire) ) {//cache for the key not expired
			$file = fopen($filename, "r");// read data file
	        if ($file){//able to open the file
	            $data = fread($file, filesize($filename));
	            fclose($file);
	            return unserialize($data);//return the values
	        }
	        else return false;
		}
		else return false;//was expired you need to create new
 	}
}
Share and Enjoy:
  • Twitter
  • Facebook
  • Digg
  • del.icio.us
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • FriendFeed
  • Meneame
  • Netvibes
  • Reddit
  • StumbleUpon
  • Tumblr
  • Wikio
  • RSS
  • email
  • PDF
  • Print

Related posts:

  1. PHP Class for better cache – fileCache
  2. phpMyDB – Data base class for MySql
  3. Simple cache for PHP
  4. Read RSS in PHP with cache
  5. Print folder contents recursive with indent – PHP

4 Comments

  1. Nenillo says:

    The class is good, but this concept has a problem, on a big site with a really big number of keys you will be overloading the file system. Also some keys may be used three or four times and rest on the directory forever.

    The second part is easy to manage, you can set a cron script to delete keys longer than X time.

    About big list of files, you may want to see some memory cache systems like PHP APC.

    Anyway, for little-medium sites the class fits perfectly!

  2. Chema says:

    You are plumb right ;)

    You need to be really careful with performance, deleting old caches it’s a must do.

    About APC, works great, I’m actually using it, since is the best way I’ve found.

    This class I wrote it thinking more to cache some queries as in the example, I will release the db class that I’m currently developing for OC, that db class uses this class to cache heavy queries ;), that’s the idea of the script actually.

    Happy you like it, I’m sure you saw things like this every where…I actually based it on this functions I had before: http://neo22s.com/simple-cache-for-php/

  3. [...] Continue reading here: Cache Class for PHP | Neo22s [...]

  4. [...] days a go I wrote about a cache class and longer a go about application variables for php. This is a mix of both in just one powerful [...]

Leave a Reply

Follow me