Scripts

Cache class

Stukje coding van ongeveer een halfjaar/3-kwart jaar geleden. Hiermee kan je data (uit bijvoorbeeld je database) wegschrijven naar een server-bestand, zodat je SQL-Server minder wordt belast. Ook is het gewoon mogelijk om hele webpagina's of alleen variabelen hierin te cachen. Lifetime instellen, en viola! Veel succes ermee!

index.php
<?php

require_once('Cache.class.php');

/**
 * @author LorenzPHP
 * @copyright 2010
 */

New Cache('cache'); // Map waar de data heen gaat..

/**
 * Cache web-url
 */

$cache = file_get_contents('http://www.bulletstar.net/rss.php');

	if (Cache::isCached($cache))
	{
		print Cache::Read($cache);
	}
	else
	{
		if (Cache::Write($cache, 5*60)) // Lifetime is 5 minuten.   
		{
			print Cache::Read($cache);
		}
	}
	
/**
 * Cache another data
 */

	if (!Cache::isCached('test')) // Wanneer je zeker weet dat het bestand niet bestaat..
	{
		if (Cache::Write('test', 300))
		{
			print 'Succesvol opgeslagen.';		// Lifetime is 300 seconden (zelfde als 5 minuten)   
		}
	}
?>
cache.class.php
<?php
error_reporting(E_ALL);

/**
* Cache data to a file on the server.
*
* @static
* @author Lorenzo de Kamps
* @since 14-05-2010
* @copyright 2010 - 2011, Lorenzo de Kamps
* @version 1.0 stable
*/

class Cache
{
	public static $dir;
	public static $file;
	public static $lifetime;
	public static $dir_file;
	
	public function __construct($direct)
	{
		try
		{
			self::$dir = $direct; 
			if (!is_dir(self::$dir))
			{
				$create = mkdir(self::$dir, 0777);
				if (!$create)
				{
					Throw new Exeption('Can\'t create cache-directory.');
				}
			}
			
		}
		catch (Exception $e)
		{
			self::ErrorHandler($e->getMessage());
		}
	}
	
	
	public static function isCached($file)
	{
		   $string = md5($file);
		   self::$dir_file = self::$dir.'/'.$string.'.txt';
		   $open = @fopen(self::$dir_file, 'r');
		   if ($open)
		   {
				return true;
		   }
		   else
		   {
				return false;
		   }	 
	}
	
	public static function Read($cache)
	{
		 try
		{
		   $string = md5($cache);
		   $open = fopen(self::$dir_file, 'r');
		   if ($open)
		   {
					$theData = fread($open,1000000);
					$un = unserialize($theData);
					fclose($open);
									 
					if ($un['timestamp'] < time() - self::$lifetime)
					{
						unlink(self::$dir_file);
						Cache::Write($cache);
					}  
					return $un['data'];  
		   }
		   else
		   {
				throw New Exception('Can\'t open file.');
		   }
		}
		catch (Exception $e)
		{
		   self::ErrorHandler($e->getMessage()); 
		}	  
	}
	
	public static function Write($item, $lifetime = 300)
	{
		try
		{
			self::$lifetime = $lifetime;
			
		   $string = md5($item); 
		   $create = fopen(self::$dir_file, 'w');
		   $file = $item;
		   if ($create)
		   {
				if ($file)
				{
					$data = array(
						'timestamp' => time(),
						'data'	  => $file
					);
					fputs($create, serialize($data));
					fclose($create);
					return true;
				}
				else
				{
					throw new Exception('Can\'t read web-adres.');
				}
				
		   }
		   else
		   {
				throw new Exception('Can\'t create file.');
		   }
		}
		catch (Exception $e)
		{
		   self::ErrorHandler($e->getMessage()); 
		}	  
	}
	
	private static function ErrorHandler($error)
	{
		return print "<pre>".$error."</pre>";
	}
	
}

?>

Reacties

0
Nog geen reacties.