IT虾米网

PHP缓存类详解

lxf 2018年06月24日 编程语言 131 0
参数详解如下:

第一个参数:
缓存二级目录
第二个参数:缓存时间  默认1800
第三个参数:是否需要三级目录  0:不需要  1 需要  默认0
第四个参数:缓存后缀  默认 .html
 

调用方法:
$cache = new php_cache('index');
$cache = new php_cache('index',1800);
$cache = new php_cache('index',1800,1);
$cache = new php_cache('index',1800,1,'.html');

<?php 
class php_cache{ 
  public function __construct($file_dir,$cache_time=1800,$file_two=0,$file_fix='.htm'){ 
	$this->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)<$this->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); 
    } 
  } 
} 
?> 

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

jQuery实现密码强度检测详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。