Seditio Source
Root |
./othercms/dle15_0/upload/engine/classes/min/lib/Minify/Cache/File.php
<?php
/**
 * Class Minify_Cache_File  
 * @package Minify
 */

class Minify_Cache_File {
   
    public function
__construct($path = '', $fileLocking = false)
    {
        if (!
$path) {
           
$path = self::tmp();
        }
       
$this->_locking = $fileLocking;
       
$this->_path = $path;
    }

   
/**
     * Write data to cache.
     *
     * @param string $id cache id (e.g. a filename)
     *
     * @param string $data
     *
     * @return bool success
     */
   
public function store($id, $data)
    {
       
$flag = $this->_locking
           
? LOCK_EX
           
: null;
       
$file = $this->_path . '/' . $id;
        if (! @
file_put_contents($file, $data, $flag)) {
           
$this->_log("Minify_Cache_File: Write failed to '$file'");
        }
       
// write control
       
if ($data !== $this->fetch($id)) {
            @
unlink($file);
           
$this->_log("Minify_Cache_File: Post-write read failed for '$file'");
            return
false;
        }
        return
true;
    }
   
   
/**
     * Get the size of a cache entry
     *
     * @param string $id cache id (e.g. a filename)
     *
     * @return int size in bytes
     */
   
public function getSize($id)
    {
        return
filesize($this->_path . '/' . $id);
    }
   
   
/**
     * Does a valid cache entry exist?
     *
     * @param string $id cache id (e.g. a filename)
     *
     * @param int $srcMtime mtime of the original source file(s)
     *
     * @return bool exists
     */
   
public function isValid($id, $srcMtime)
    {
       
$file = $this->_path . '/' . $id;
        return (
is_file($file) && (filemtime($file) >= $srcMtime));
    }
   
   
/**
     * Send the cached content to output
     *
     * @param string $id cache id (e.g. a filename)
     */
   
public function display($id)
    {
        if (
$this->_locking) {
           
$fp = fopen($this->_path . '/' . $id, 'rb');
           
flock($fp, LOCK_SH);
           
fpassthru($fp);
           
flock($fp, LOCK_UN);
           
fclose($fp);
        } else {
           
readfile($this->_path . '/' . $id);            
        }
    }
   
   
/**
     * Fetch the cached content
     *
     * @param string $id cache id (e.g. a filename)
     *
     * @return string
     */
   
public function fetch($id)
    {
        if (
$this->_locking) {
           
$fp = fopen($this->_path . '/' . $id, 'rb');
            if (!
$fp) {
                return
false;
            }
           
flock($fp, LOCK_SH);
           
$ret = stream_get_contents($fp);
           
flock($fp, LOCK_UN);
           
fclose($fp);
            return
$ret;
        } else {
            return
file_get_contents($this->_path . '/' . $id);
        }
    }
   
   
/**
     * Fetch the cache path used
     *
     * @return string
     */
   
public function getPath()
    {
        return
$this->_path;
    }

   
/**
     * Get a usable temp directory
     *
     * Adapted from Solar/Dir.php
     * @author Paul M. Jones <pmjones@solarphp.com>
     * @license http://opensource.org/licenses/bsd-license.php BSD
     * @link http://solarphp.com/trac/core/browser/trunk/Solar/Dir.php
     *
     * @return string
     */
   
public static function tmp()
    {
        static
$tmp = null;
        if (!
$tmp) {
           
$tmp = function_exists('sys_get_temp_dir')
                ?
sys_get_temp_dir()
                :
self::_tmp();
           
$tmp = rtrim($tmp, DIRECTORY_SEPARATOR);
        }
        return
$tmp;
    }

   
/**
     * Returns the OS-specific directory for temporary files
     *
     * @author Paul M. Jones <pmjones@solarphp.com>
     * @license http://opensource.org/licenses/bsd-license.php BSD
     * @link http://solarphp.com/trac/core/browser/trunk/Solar/Dir.php
     *
     * @return string
     */
   
protected static function _tmp()
    {
       
// non-Windows system?
       
if (strtolower(substr(PHP_OS, 0, 3)) != 'win') {
           
$tmp = empty($_ENV['TMPDIR']) ? getenv('TMPDIR') : $_ENV['TMPDIR'];
            if (
$tmp) {
                return
$tmp;
            } else {
                return
'/tmp';
            }
        }
       
// Windows 'TEMP'
       
$tmp = empty($_ENV['TEMP']) ? getenv('TEMP') : $_ENV['TEMP'];
        if (
$tmp) {
            return
$tmp;
        }
       
// Windows 'TMP'
       
$tmp = empty($_ENV['TMP']) ? getenv('TMP') : $_ENV['TMP'];
        if (
$tmp) {
            return
$tmp;
        }
       
// Windows 'windir'
       
$tmp = empty($_ENV['windir']) ? getenv('windir') : $_ENV['windir'];
        if (
$tmp) {
            return
$tmp;
        }
       
// final fallback for Windows
       
return getenv('SystemRoot') . '\\temp';
    }

   
/**
     * Send message to the Minify logger
     * @param string $msg
     * @return null
     */
   
protected function _log($msg)
    {
       
Minify_Logger::log($msg);
    }
   
    private
$_path = null;
    private
$_locking = null;
}