PHP Classes

File: src/PHPVideoToolkit/Cache/InTempDirectory.php

Recommend this page to a friend!
  Classes of Oliver Lillie   PHP Video Toolkit   src/PHPVideoToolkit/Cache/InTempDirectory.php   Download  
File: src/PHPVideoToolkit/Cache/InTempDirectory.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Video Toolkit
Manipulate and convert videos with ffmpeg program
Author: By
Last change:
Date: 1 year ago
Size: 5,269 bytes
 

Contents

Class file image Download
<?php
   
   
/**
     * This file is part of the PHP Video Toolkit v2 package.
     *
     * @author Oliver Lillie (aka buggedcom) <publicmail@buggedcom.co.uk>
     * @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;
        }
    }