| 
<?php
 /**
 * This file is part of the PHP Video Toolkit v2 package.
 *
 * @author Oliver Lillie (aka buggedcom) <[email protected]>
 * @license Dual licensed under MIT and GPLv2
 * @copyright Copyright (c) 2008-2014 Oliver Lillie <http://www.buggedcom.co.uk>
 * @package PHPVideoToolkit V2
 * @version 2.1.7-beta
 * @uses ffmpeg http://ffmpeg.sourceforge.net/
 */
 
 namespace PHPVideoToolkit;
 
 /**
 * PHPVideoToolkit's caching driver for storing the cache inside the specified temp directory.
 *
 * @author Oliver Lillie
 */
 class Cache_InTempDirectory extends CacheAbstract
 {
 /**
 * Determines if this caching driver is available on the current system.
 *
 * @access public
 * @author Oliver Lillie
 * @return boolean Returns true if the driver is available, false otherwise.
 */
 public function isAvailable()
 {
 $dir = $this->_config->temp_directory;
 if(is_dir($dir) === false)
 {
 return false;
 }
 if(is_writable($dir) === false)
 {
 return false;
 }
 
 $cache_dir = $dir.'/'.$this->_key_prefix.'_cache';
 if(is_dir($cache_dir) === false && mkdir($cache_dir, 0770) === false)
 {
 return false;
 }
 return true;
 }
 
 /**
 * Creates the file path prefix for a cache file based off the given key.
 *
 * @access protected
 * @author Oliver Lillie
 * @param  string $key The cache key string.
 * @return string Returns the generated file path prefix.
 */
 protected function _getFilePathPrefix($key)
 {
 $dir = $this->_config->temp_directory;
 return $dir.'/'.$this->_key_prefix.'_cache/'.md5($key).'_';
 }
 
 /**
 * Returns the file path for the given key. Returning the most recent version and clearing old cache keys.
 *
 * @access protected
 * @author Oliver Lillie
 * @param  string $key The cache key string.
 * @return string Returns the found file path for the given cache key.
 */
 protected function _getFile($key)
 {
 $file_prefix = $this->_getFilePathPrefix($key);
 $matches = glob($file_prefix.'*');
 if(empty($matches) === false)
 {
 natsort($matches);
 $cur_time = time();
 $oldest = 0;
 foreach ($matches as $path)
 {
 $name = basename($path);
 $parts = explode('_', $name);
 if($parts[1] < $cur_time)
 {
 @unlink($path);
 }
 else if($parts[1] > $oldest)
 {
 $oldest = $parts[1];
 }
 }
 if($oldest > 0)
 {
 return $file_prefix.$oldest;
 }
 }
 return null;
 }
 
 /**
 * Returns the unserialized contents for the given cache key if the file exists.
 * Otherwise returns null.
 *
 * @access protected
 * @author Oliver Lillie
 * @param  string $key The cache key string.
 * @return mixed Returns null if the key does not exist, otherwise returns a mixed value depending on what has been stored.
 */
 protected function _get($key)
 {
 $file = $this->_getFile($key);
 if(is_file($file) === true)
 {
 $data = file_get_contents($file);
 return unserialize($data);
 }
 return null;
 }
 
 /**
 * Determines if the cache for the given key exists.
 *
 * @access protected
 * @author Oliver Lillie
 * @param  string $key The cache key string.
 * @return boolean Returns true if the key cache exists, otherwise false.
 */
 protected function _isMiss($key)
 {
 return !is_file($this->_getFile($key));
 }
 
 /**
 * Sets data to the given cache key with an optional expiration date.
 *
 * @access protected
 * @author Oliver Lillie
 * @param  string $key The cache key string.
 * @param  mixed $value The data to be stored by the cache driver.
 * @param  mixed $expiration Integer timestamp if the data is too expire, otherwise null as the cache defaults to expire in 1 hour.
 * @return boolean Returns true if the cache was saved to file.
 */
 protected function _set($key, $value, $expiration=null)
 {
 if($expiration === null)
 {
 $expiration = 3600;
 }
 
 $file = $this->_getFilePathPrefix($key).(time()+$expiration);
 $result = file_put_contents($file, serialize($value), LOCK_EX);
 @chmod($filename, 0660);
 return $result;
 }
 }
 
 |