*/␊ |
class Pluf_Cache_File extends Pluf_Cache␊ |
{␊ |
/**␊ |
* Is debug mode?␊ |
*␊ |
* @var boolean␊ |
*/ ␊ |
private $_debug;␊ |
␊ |
/**␊ |
* Mapping key => md5.␊ |
*␊ |
* @var array␊ |
*/␊ |
private $_keymap = array();␊ |
␊ |
public function __construct()␊ |
{␊ |
if (false == Pluf::f('cache_file_folder', false)) {␊ |
if (!Pluf::f('cache_file_folder', false)) {␊ |
throw new Pluf_Exception_SettingError('"cache_file_folder" setting not defined.');␊ |
}␊ |
␊ |
$this->_debug = Pluf::f('debug', false);␊ |
}␊ |
␊ |
/**␊ |
|
{␊ |
$fname = $this->_keyToFile($key);␊ |
$dir = dirname($fname);␊ |
if ($timeout == null) $timeout = Pluf::f('cache_timeout', 300);␊ |
if (!file_exists($dir)) mkdir($dir, 0777, true);␊ |
$expire = time()+$timeout;␊ |
if (null === $timeout) {␊ |
$timeout = Pluf::f('cache_timeout', 300);␊ |
}␊ |
if (!file_exists($dir)) {␊ |
mkdir($dir, 0777, true);␊ |
}␊ |
$expire = $_SERVER['REQUEST_TIME'] + $timeout;␊ |
$success = file_put_contents($fname, $expire."\n".serialize($value), LOCK_EX);␊ |
chmod($fname, 0777);␊ |
␊ |
return (false === $success) ? false : true;␊ |
}␊ |
␊ |
|
public function get($key, $default=null)␊ |
{␊ |
$fname = $this->_keyToFile($key);␊ |
if (!file_exists($fname)) return $default;␊ |
list($timeout, $content) = explode("\n", file_get_contents($fname), 2);␊ |
if ($timeout < time()) {␊ |
if (!file_exists($fname)) {␊ |
return $default;␊ |
}␊ |
␊ |
if ($this->_debug) {␊ |
ob_start();␊ |
include $fname;␊ |
$data = ob_get_contents();␊ |
ob_end_clean();␊ |
} else {␊ |
$data = file_get_contents($fname);␊ |
}␊ |
list($timeout, $content) = explode("\n", $data, 2);␊ |
␊ |
if ($timeout < $_SERVER['REQUEST_TIME']) {␊ |
@unlink($fname);␊ |
return $default;␊ |
}␊ |
␊ |
return unserialize($content);␊ |
}␊ |
␊ |
|
*/␊ |
public function _keyToFile($key)␊ |
{␊ |
$md5 = md5($key);␊ |
return Pluf::f('cache_file_folder').'/'.substr($md5, 0, 2)␊ |
.'/'.substr($md5, 2, 2).'/'.substr($md5, 4);␊ |
if (isset($this->_keymap[$key])) {␊ |
$md5 = $this->_keymap[$key];␊ |
} else {␊ |
$md5 = md5($key);␊ |
$this->_keymap[$key] = $md5;␊ |
}␊ |
␊ |
return Pluf::f('cache_file_folder') . '/' .␊ |
substr($md5, 0, 2) . '/' .␊ |
substr($md5, 2, 2) . '/' .␊ |
substr($md5, 4);␊ |
}␊ |
}␊ |