Вход Регистрация
Файл: MobileCMS-2.7.0-beta/System/Deprecated/FileCache.php
Строк: 49
<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace SystemDeprecated;

/**
 * Description of FileCache
 *
 * @author KpuTuK
 */
class FileCache {

    protected 
$dir;

    
/**
     * Constructor
     * @param string $dir
     */
    
public function __construct($dir) {
        
$this->dir $dir;
        if (!
is_dir($this->dir) OR ! is_writable($this->dir)) {
            exit(
'Директория для кэша не найдена, либо нет прав на запись');
        }
    }

    
/**
     * Получение данных
     */
    
public function get($key$expiration 3600) {
        
$cache_path $this->_name($key);

        if (!@
file_exists($cache_path)) {
            return 
FALSE;
        }

        if (
filemtime($cache_path) < (time() - $expiration)) {
            
$this->clear($key);
            return 
FALSE;
        }

        if (!
$fp = @fopen($cache_path'rb')) {
            return 
FALSE;
        }

        
flock($fpLOCK_SH);

        
$cache '';

        if (
filesize($cache_path) > 0) {
            
$cache unserialize(fread($fpfilesize($cache_path)));
        } else {
            
$cache NULL;
        }

        
flock($fpLOCK_UN);
        
fclose($fp);

        return 
$cache;
    }

    
/**
     * Запись данных
     */
    
public function set($key$data) {
        
$cache_path $this->_name($keytrue);

        if (!
$fp fopen($cache_path'wb')) {
            return 
FALSE;
        }

        if (
flock($fpLOCK_EX)) {
            
fwrite($fpserialize($data));
            
flock($fpLOCK_UN);
        } else {
            return 
FALSE;
        }

        
fclose($fp);
        @
chmod($cache_path0777);
        return 
true;
    }

    
/**
     * Очистка кэша по ключу
     */
    
public function clear($key) {
        
$cache_path $this->_name($key);

        if (
file_exists($cache_path)) {
            
unlink($cache_path);
            return 
true;
        }

        return 
false;
    }

    
/**
     * Генерация имени файла
     */
    
private function _name($key$is_set false) {
        
$key_name md5($key);
        
$subdir substr($key_name01);
        if (
$is_set) {
            if (!
file_exists($this->dir '/' $subdir)) {
                
mkdir($this->dir '/' $subdir);
                
chmod($this->dir '/' $subdir0777);
            }
        }

        return 
sprintf("%s/%s/%s"$this->dir$subdir$key_name);
    }

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