file.php 1.83 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
<?php namespace System\Cache\Driver;

class File implements \System\Cache\Driver {

	/**
	 * All of the loaded cache items.
	 *
	 * @var array
	 */
	private $items = array();

	/**
	 * Determine if an item exists in the cache.
	 *
	 * @param  string  $key
	 * @return bool
	 */
	public function has($key)
	{
		return ( ! is_null($this->get($key)));
	}

	/**
	 * Get an item from the cache.
	 *
	 * @param  string  $key
	 * @param  mixed   $default
	 * @return mixed
	 */	
	public function get($key, $default = null)
	{
		// --------------------------------------------------
		// If the item has already been loaded, return it.
		// --------------------------------------------------
		if (array_key_exists($key, $this->items))
		{
			return $this->items[$key];
		}

		// --------------------------------------------------
41
		// Does the cache item even exist?
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
		// --------------------------------------------------
		if ( ! file_exists(APP_PATH.'cache/'.$key))
		{
			return $default;
		}

		$cache = file_get_contents(APP_PATH.'cache/'.$key);

		// --------------------------------------------------
		// Has the cache expired? The UNIX expiration time
		// is stored at the beginning of the file.
		// --------------------------------------------------
		if (time() >= substr($cache, 0, 10))
		{
			$this->forget($key);

			return $default;
		}

		return $this->items[$key] = unserialize(substr($cache, 10));
	}

	/**
	 * Write an item to the cache.
	 *
	 * @param  string  $key
	 * @param  mixed   $value
	 * @param  int     $minutes
	 * @return void
	 */
	public function put($key, $value, $minutes)
	{
		file_put_contents(APP_PATH.'cache/'.$key, (time() + ($minutes * 60)).serialize($value), LOCK_EX);
	}

	/**
	 * Delete an item from the cache.
	 *
	 * @param  string  $key
	 * @return void
	 */
	public function forget($key)
	{
		@unlink(APP_PATH.'cache/'.$key);
	}

}