Home > php教程 > php手册 > 发一个PHP缓存类的原理

发一个PHP缓存类的原理

WBOY
Release: 2016-06-21 08:54:49
Original
962 people have browsed it

 

define('CACHE_ROOT', dirname(__FILE__).'/cache'); //缓存存放目录

define('CACHE_TIME', 1800);//缓存时间 单位秒

define('CACHE_FIX','.html');

$CacheName=md5($_SERVER['REQUEST_URI']).CACHE_FIX; //缓存文件名

$CacheDir=CACHE_ROOT.'/'.substr($CacheName,0,1);//缓存文件存放目录

$CacheUrl=$CacheDir.'/'.$CacheName;//缓存文件的完整路径

//GET方式请求才缓存,POST之后一般都希望看到最新的结果 

if($_SERVER['REQUEST_METHOD']=='GET'){

  //如果缓存文件存在,并且没有过期,就把它读出来。

  if(file_exists($CacheName) && time()-filemtime($CacheName)

    $fp=fopen($CacheName,'rb'); 

    fpassthru($fp); 

    fclose($fp); 

    exit; 

  }

  //判断文件夹是否存在,不存在则创建

  elseif(!file_exists($CacheDir)){ 

    if(!file_exists(CACHE_ROOT)){ 

      mkdir(CACHE_ROOT,0777); 

      chmod(CACHE_ROOT,0777); 

    } 

    mkdir($CacheDir,0777); 

    chmod($CacheDir,0777); 

  }

  //回调函数,当程序结束时自动调用此函数 

  function AutoCache($contents){ 

    global $CacheUrl; 

    $fp=fopen($CacheUrl,'wb'); 

    fwrite($fp,$contents); 

    fclose($fp); 

    chmod($CacheUrl,0777); 

    //生成新缓存的同时,自动删除所有的老缓存,以节约空间,可忽略。 

    //DelOldCache();

    return $contents;

  }

  function DelOldCache(){ 

    chdir(CACHE_ROOT); 

    foreach (glob("*/*".CACHE_FIX) as $file){ 

      if(time()-filemtime($file)>CACHE_TIME)unlink($file);

    }

  }

  //回调函数 auto_cache 

  ob_start('AutoCache');

}else{ 

  //不是GET的请求就删除缓存文件。 

  if(file_exists($CacheUrl))unlink($CacheUrl); 

}

?>




Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template