Browse Source
Removed obsolete cacher, #16
Removed obsolete cacher, #16
git-svn-id: svn+ssh://code.netmonsters.ru/svn/majestic/branches/evo@131 4cb57b5f-5bbd-dd11-951b-001d605cbbc5master
pzinovkin
15 years ago
1 changed files with 0 additions and 136 deletions
@ -1,136 +0,0 @@ |
|||
<?php |
|||
/** |
|||
* Класс кеша. |
|||
* Отвечает за кеширование результатов выполнения действий. |
|||
* |
|||
* @copyright NetMonsters <team@netmonsters.ru> |
|||
* @link |
|||
* @package Majestic |
|||
* @subpackage Cache |
|||
* @since |
|||
* @version SVN: $Id$ |
|||
* @filesource $URL$ |
|||
*/ |
|||
final class Cache |
|||
{ |
|||
private $cache_file; |
|||
private $cache_folder; |
|||
private $cache_time; |
|||
|
|||
private $mode = 0777; |
|||
private $infofile = '_infofile'; |
|||
|
|||
const HASH_ENABLE = true; |
|||
|
|||
function __construct($cache_name, $cache_time) |
|||
{ |
|||
if (!preg_match('/[a-zA-Z0-9_]/', $cache_name)) { |
|||
throw new MJException('Wrong cache identifier "'.$cache_name.'". Must use only [a-zA-Z0-9_]'); |
|||
} |
|||
|
|||
if ($cache_name == $this->infofile) { |
|||
throw new MJException('Name "'.$this->infofile.'" is reserved. Try another one.'); |
|||
} |
|||
|
|||
if ($cache_time == 0) { |
|||
throw new MJException('cache_time must be non-zero'); |
|||
} |
|||
|
|||
if ($cache_time > 86400) { |
|||
throw new MJException('cache_time cannot be greater than 86400 sec (24 hours)'); |
|||
} |
|||
|
|||
if (substr($cache_name, 0, 1) == '_') { |
|||
$this->cache_folder = CACHE_PATH; |
|||
} else { |
|||
$parts = explode('_', $cache_name, 2); |
|||
$this->cache_folder = CACHE_PATH.'/'.(isset($parts[1]) ? $parts[0] : '_all'); |
|||
if (self::HASH_ENABLE) { |
|||
$hash = md5($cache_name); |
|||
$this->cache_folder .= '/'.substr($hash, 0, 1).'/'.substr($hash, 0, 2); |
|||
} |
|||
} |
|||
|
|||
$this->cache_file = $this->cache_folder.'/'.$cache_name; |
|||
if (!is_writable($this->cache_folder)) { |
|||
mkdir($this->cache_folder, $this->mode, true); |
|||
} |
|||
|
|||
$this->cache_time = (int) $cache_time; |
|||
} |
|||
|
|||
/** |
|||
* Сохраняет кэш в файл |
|||
* |
|||
* @param string/array $data - строка (либо одномерный массив) сохраняемых данных |
|||
* @return boolean - сохранил или нет |
|||
*/ |
|||
function save($data) |
|||
{ |
|||
if ($this->cache_time != 0 && is_writable($this->cache_folder)) { |
|||
$this->clearOld(); //очистка старых файлов.
|
|||
// а был-ли кеш?
|
|||
$exists = file_exists($this->cache_file); |
|||
$result = file_put_contents($this->cache_file, $data); |
|||
// если не существовал кеш - выставляем корректные права на него.
|
|||
if ($result && !$exists) { |
|||
chmod($this->cache_file, 0664); |
|||
} |
|||
return (bool)$result; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
/** |
|||
* Достает кэш из файла |
|||
* |
|||
* @return string - содержимое кеша |
|||
*/ |
|||
function load() |
|||
{ |
|||
if ($this->cache_time != 0) { |
|||
return file_get_contents($this->cache_file); |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
/** |
|||
* Принудительно очистить кеш |
|||
* |
|||
*/ |
|||
function reset() |
|||
{ |
|||
@unlink($this->cache_file); |
|||
} |
|||
|
|||
/** |
|||
* Проверяет, закешированы ли данные с таким именем |
|||
* |
|||
* @return boolean - закеширован или нет |
|||
*/ |
|||
function isCached() |
|||
{ |
|||
if (is_readable($this->cache_file)) { |
|||
if ($this->cache_time < 0 || $this->cache_time + filemtime($this->cache_file) > time()) { |
|||
return true; |
|||
} |
|||
$this->reset(); //удалим просроченый файл
|
|||
} |
|||
return false; |
|||
} |
|||
|
|||
/** |
|||
* Удаление файлов старше суток |
|||
* |
|||
*/ |
|||
function clearOld() |
|||
{ |
|||
$file = CACHE_PATH . '/' . $this->infofile; |
|||
if (!file_exists($file) || date('Ymd', filemtime($file)) != date('Ymd')) { |
|||
exec('find ' . CACHE_PATH . '/ -type f \! -path "*.svn*" -mtime +1 -delete'); //не удаляет папки сохраняя структуру
|
|||
touch($file); |
|||
} |
|||
} |
|||
} |
|||
|
|||
?>
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue