Files
sihnon-php-lib/source/lib/Sihnon/Cache.class.php
Ben Roberts ddd2e62c13 Imports code from RippingCluster project
Imports all generic classes from the RippingCluster project, with any ripping-specific code stripped out.
Tested against a dummy project for errors.
2010-10-10 11:36:58 +01:00

62 lines
1.8 KiB
PHP

<?php
class Sihnon_Cache {
protected $config;
protected $cache_dir;
public function __construct(Sihnon_Config $config) {
$this->config = $config;
$this->cache_dir = $config->get('cache.base_dir');
if (is_dir($this->cache_dir)) {
if ( ! is_writeable($this->cache_dir)) {
throw new Sihnon_Exception_InvalidCacheDir();
}
} else {
if ( ! Sihnon_Main::mkdir_recursive($this->cache_dir)) {
throw new Sihnon_Exception_InvalidCacheDir();
}
}
}
protected function cacheFilename($source_filename) {
return $this->cache_dir . sha1($source_filename);
}
public function exists($source_filename, $ttl = 3600) {
$cache_filename = $this->cacheFilename($source_filename);
// Check to see if the file is cached
if (!file_exists($cache_filename)) {
return false;
}
// Check to see if the cache has expired
if (filemtime($cache_filename) + $ttl < time()) {
// Delete the cached item
unlink($cache_filename);
return false;
}
return true;
}
public function store($source_filename, $content) {
$cache_filename = $this->cacheFilename($source_filename);
return file_put_contents($cache_filename, $content);
}
public function fetch($source_filename, $ttl = 3600) {
$cache_filename = $this->cacheFilename($source_filename);
if (!$this->exists($source_filename)) {
throw new Sihnon_Exception_CacheObjectNotFound($source_filename);
}
return file_get_contents($cache_filename);
}
};
?>