<?php
// 精迅CMS框架缓存类
class Cache {
	/**
	 * 读取缓存
	 *
	 * @access public
	 * @param  $name 缓存名称
	 * @param  $dir 子目录
	 * @param  $time 有效时间 0表示不限制
	 * @param  $defaultDir 默认目录
	 * @return mix
	 */
	public function read($name, $dir = '', $time = 0, $defaultDir = 'Cache') {
		$cacheFile = self :: getPath($name, $dir, $defaultDir);
		if (is_file($cacheFile)) {
			$readcache = $time > 0 && TIME - filemtime($cacheFile) > $time ? false : true;
		} else $readcache = false;
		if ($readcache && is_file($cacheFile)) {
			$data = file_get_contents($cacheFile);
			if ($data) {
				$data = substr($data, strpos($data, '?>') + 2);
				$data = unserialize($data);
			}
		} else $data = false;
		return $data;
	}
	/**
	 * 写入缓存
	 *
	 * @access public
	 * @param  $name 缓存名称
	 * @param  $data 缓存数据
	 * @param  $dir 子目录
	 * @param  $defaultDir 默认目录
	 * @return intval 文件字节数
	 */
	public function write($name, $data, $dir = '', $defaultDir = 'Cache') {
		$cacheFile = self :: getPath($name, $dir, $defaultDir);
		FileUtil :: create(dirname($cacheFile));
		$data = empty($data)?'':serialize($data);
		$strlen = file_put_contents($cacheFile, '<?php defined(\'IN_JXCMS\') or exit(\'Access Denied\');?>' . $data);
		@chmod($cacheFile, 0777);
		return $strlen;
	}
	/**
	 * 删除缓存
	 *
	 * @access public
	 * @param  $name 缓存名称
	 * @param  $dir 子目录
	 * @param  $defaultDir 默认目录
	 * @return boolean
	 */
	public function del($name, $dir = '', $defaultDir = 'Cache') {
		$cacheFile = self :: getPath($name, $dir, $defaultDir);
		return @unlink($cacheFile);
	}
	/**
	 * 生成配置
	 *
	 * @access public
	 * @param  $data 配置数组
	 * @param  $name 缓存名称
	 * @return intval 文件字节数
	 */
	public function config($data, $name = '') {
		$name = $name?$name . '_conf':'conf';
		$cacheFile = self :: getPath($name, '', 'Config');
		$data = "<?php\n\r" . 'return ' . var_export($data, true) . ";\n";
		$strlen = file_put_contents($cacheFile, $data);
		@chmod($cacheFile, 0777);
		return $strlen;
	}
	/**
	 * 获取缓存路径
	 *
	 * @access public
	 * @param  $name 缓存名称
	 * @param  $dir 缓存目录
	 * @param  $defaultDir 默认目录
	 * @return string
	 */
	public function getPath($name, $dir = '', $defaultDir = 'Cache') {
		if ($dir) $dir = ucwords($dir) . '/';
		if ($defaultDir) $defaultDir = ucwords($defaultDir) . '/';
		$dir = JXCMS_ROOT . 'jxcms/Runtime/' . $defaultDir . $dir;
		is_dir($dir) or FileUtil :: create($dir);
		return $dir . $name . '.php';
	}
}
