<?php

/*
缓存类文件
使用： 
$cache = new cache();
$cache->expire=2222;//设置时间
$cache->cache_dir="data/cache";设置缓存目录
//判断文件是否缓存
$cache->iscached("2.txt");
//写入缓存
$cache->writecache("2.txt","12233");
//写入php缓存
$cache->writePhpCace("2.php","xx",array('aa','x'));
//读取缓存
$cache->getcache("2.txt");
//读取php缓存
@include_once($cache->getphpCache("2.php"));
//清除缓存
$cache->clearcache($type);  
$type=0 清除当前目录缓存  
$type=1 清除当前目录及子目录缓存
*/

class cache
{
	public $expire=3600;
	public $cache_dir="data/cache/filecache";	
	function __construct($expire=3600,$cache_dir='data/cache/filecache')
	{
		$this->cache($expire,$cache_dir);
	}
	
	function cache($expire=3600,$cache_dir='data/cache/filecache')
	{
		$this->expire=$expire;
		$this->cache_dir=$cache_dir;
	}
	/*
	@获取缓存内容
	*@file 文件名
	*/
	function getCache($file)
	{
		$file=$this->cache_dir."/".$file;
		if($this->isCached($file))
		{
			return @unserialize(file_get_contents($file));
		}else
		{
			return false;
		}
	}
	/**
	*@获取php缓存 可以直接include文件
	*/
	function getPhpCache($file)
	{
		$file=ROOT_PATH.$this->cache_dir."/".$file;

		if($this->isCached($file))
		{
			return $file;
		}else
		{
			return false;
		}
	}
	/**
	@判断缓存是否有效
	*@
	*/
	function isCached($file)
	{
		if(file_exists($file))
		{
			$s=stat($file);
			$mtime=$s['mtime'];//文件修改的时间
			if(time()>$mtime+$this->expire)
			{
				return false;
			}else
			{
				return true;
			}
		}else
		{
			return false;
		}
	}
	
	/*
	*@写入缓存内容
	*/
	function writeCache($file,$content)
	{
		$file=$this->cache_dir."/".$file;
		file_put_contents($file,serialize($content));
	}
	/**
	*@写入php缓存
	*/
	function writePhpCache($file,$var,$content)
	{
		$file=$this->cache_dir."/".$file;
		$content='<?php'." \r\n".'$'.$var.'='.var_export($content,true)."\r\n?>";
		file_put_contents($file,$content);
	}
	/**
	@删除目录缓存
	*/
	function clearCache($type=0)
	{
		$this->delFile($this->cache_dir);
	}
	/**
	@删除某个文件缓存
	@file 文件名
	*/
	
	/**
	@删除目录下的所有文件  保留当前目录
	$type 0--不删除下级目录的文件 1--删除下级目录及文件
	*/
	function delFile($dir,$type=0)
	{
		$hd=opendir($dir);
		while(($f=readdir($hd))!=false)
		{
			if($f!=".." and $f!=".")
			{
				if(is_file($dir.$f)){
					unlink($dir.$f);
				}elseif($type==1)
				{
					delfile($dir.$f."/");
				}
			}
		}
	}	
}

?>