Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/oyejorge/less.php/lib/Less/Cache.php
Строк: 119
<?php

require_once( dirname(__FILE__).'/Version.php');

/**
 * Utility for handling the generation and caching of css files
 *
 * @package Less
 * @subpackage cache
 *
 */
class Less_Cache{

    public static 
$cache_dir = false;        // directory less.php can use for storing data


    /**
     * Save and reuse the results of compiled less files.
     * The first call to Get() will generate css and save it.
     * Subsequent calls to Get() with the same arguments will return the same css filename
     *
     * @param array $less_files Array of .less files to compile
     * @param array $parser_options Array of compiler options
     * @param boolean $use_cache Set to false to regenerate the css file
     * @return string Name of the css file
     */
    
public static function Get( $less_files, $parser_options = array(), $use_cache = true ){


        
//check $cache_dir
        
if( isset($parser_options['cache_dir']) ){
            
Less_Cache::$cache_dir = $parser_options['cache_dir'];
        }

        if( empty(
Less_Cache::$cache_dir) ){
            throw new 
Exception('cache_dir not set');
        }

        
self::CheckCacheDir();

        
// generate name for compiled css file
        
$less_files = (array)$less_files;
        
$hash = md5(json_encode($less_files));
         
$list_file = Less_Cache::$cache_dir.'lessphp_'.$hash.'.list';


        if( 
$use_cache === true ){

             
// check cached content
             
if( file_exists($list_file) ){


                
$list = explode("n",file_get_contents($list_file));
                
$compiled_name = self::CompiledName($list);
                
$compiled_file = Less_Cache::$cache_dir.$compiled_name;
                if( 
file_exists($compiled_file) ){
                    @
touch($list_file);
                    @
touch($compiled_file);
                    return 
$compiled_name;
                }
            }

        }

        
$compiled = self::Cache( $less_files, $parser_options );
        if( !
$compiled ){
            return 
false;
        }


        
//save the file list
        
$cache = implode("n",$less_files);
        
file_put_contents( $list_file, $cache );


        
//save the css
        
$compiled_name = self::CompiledName( $less_files );
        
file_put_contents( Less_Cache::$cache_dir.$compiled_name, $compiled );


        
//clean up
        
self::CleanCache();

        return 
$compiled_name;
    }

    
/**
     * Force the compiler to regenerate the cached css file
     *
     * @param array $less_files Array of .less files to compile
     * @param array $parser_options Array of compiler options
     * @return string Name of the css file
     */
    
public static function Regen( $less_files, $parser_options = array() ){
        return 
self::Get( $less_files, $parser_options, false );
    }

    public static function 
Cache( &$less_files, $parser_options = array() ){


        
// get less.php if it exists
        
$file = dirname(__FILE__) . '/Less.php';
        if( 
file_exists($file) && !class_exists('Less_Parser') ){
            require_once(
$file);
        }

        
$parser_options['cache_dir'] = Less_Cache::$cache_dir;
        
$parser = new Less_Parser($parser_options);


        
// combine files
        
foreach($less_files as $file_path => $uri_or_less ){

            
//treat as less markup if there are newline characters
            
if( strpos($uri_or_less,"n") !== false ){
                
$parser->Parse( $uri_or_less );
                continue;
            }

            
$parser->ParseFile( $file_path, $uri_or_less );
        }

        
$compiled = $parser->getCss();


        
$less_files = $parser->allParsedFiles();

        return 
$compiled;
    }


    private static function 
CompiledName( $files ){

        
//save the file list
        
$temp = array(Less_Version::cache_version);
        foreach(
$files as $file){
            
$temp[] = filemtime($file)."t".filesize($file)."t".$file;
        }

        return 
'lessphp_'.sha1(json_encode($temp)).'.css';
    }


    public static function 
SetCacheDir( $dir ){
        
Less_Cache::$cache_dir = $dir;
    }

    public static function 
CheckCacheDir(){

        
Less_Cache::$cache_dir = str_replace('\','/',Less_Cache::$cache_dir);
        Less_Cache::$cache_dir = rtrim(Less_Cache::$cache_dir,'
/').'/';

        if( !file_exists(Less_Cache::$cache_dir) ){
            if( !mkdir(Less_Cache::$cache_dir) ){
                throw new Less_Exception_Parser('
Less.php cache directory couldn't be created: '.Less_Cache::$cache_dir);
            }

        }elseif( !
is_dir(Less_Cache::$cache_dir) ){
            throw new 
Less_Exception_Parser('Less.php cache directory doesn't exist: '.Less_Cache::$cache_dir);

        }elseif( !is_writable(Less_Cache::$cache_dir) ){
            throw new Less_Exception_Parser('
Less.php cache directory isn't writable: '.Less_Cache::$cache_dir);

        }

    }


    public static function 
CleanCache(){
        static 
$clean = false;

        if( 
$clean ){
            return;
        }

        
$files = scandir(Less_Cache::$cache_dir);
        if( 
$files ){
            
$check_time = time() - 604800;
            foreach(
$files as $file){
                if( 
strpos($file,'lessphp_') !== 0 ){
                    continue;
                }
                
$full_path = Less_Cache::$cache_dir.'/'.$file;
                if( 
filemtime($full_path) > $check_time ){
                    continue;
                }
                
unlink($full_path);
            }
        }

        
$clean = true;
    }

}
Онлайн: 2
Реклама