一个很方便的PHP缓存类!
程序员文章站
2022-06-01 09:11:22
...
php代码
cache_root=dirname(__FILE__).'/../cache';//缓存存放目录 $this->file_dir=$file_dir; $this->cache_time=$cache_time; $this->file_two=$file_two; $this->file_fix=$file_fix; $this->file_name=md5($_SERVER['REQUEST_URI']).$this->file_fix;//缓存文件名 $this->cache_file=$this->cache_dir=$this->cache_root.'/'.$this->file_dir;//缓存的二级文件夹 if($this->file_two==1)$this->cache_dir=$this->cache_root.'/'.$this->file_dir.'/'.substr($this->file_name,0,2);//缓存的最终文件夹 $this->cache_url=$this->cache_dir.'/'.$this->file_name;//文件存放的完整路径 //GET方式请求才缓存,POST之后一般都希望看到最新的结果 if($_SERVER['REQUEST_METHOD']=='GET'){ //如果缓存文件存在,并且没有过期,就把它读出来。 if(file_exists($this->cache_url) && time()-filemtime($this->cache_url)cache_time){ $fp=fopen($this->cache_url,'rb'); fpassthru($fp); fclose($fp); exit; }elseif(!file_exists($this->cache_dir)){//判断文件夹是否存在,不存在则创建 if(!file_exists($this->cache_file)){ if(!file_exists($this->cache_root)){ mkdir($this->cache_root,0777); chmod($this->cache_root,0777); } mkdir($this->cache_file,0777); chmod($this->cache_file,0777); if($this->file_two==1){ mkdir($this->cache_dir,0777); chmod($this->cache_dir,0777); } } } //回调函数 AutoCache //ob_start("AutoCache"); ob_start(array($this, "AutoCache")); }else{ //不是GET的请求就删除缓存文件 if(file_exists($this->cache_url))unlink($this->cache_url); } } function AutoCache($contents){ $fp=fopen($this->cache_url,'wb'); fwrite($fp,$contents); fclose($fp); chmod($this->cache_url,0777); //生成新缓存的同时,自动删除所有的老缓存,以节约空间,可忽略。 $this->DelOldCache(); return $contents; } function DelOldCache(){ chdir($this->cache_root); foreach (glob("*/*".$this->file_fix) as $file){ if(time()-filemtime($file)>$this->cache_time)unlink($file); } } } ?>