找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2120|回复: 1

[教程] PHP缓存类的原理

[复制链接]
发表于 2013-4-12 09:27:10 | 显示全部楼层 |阅读模式 来自 中国–广东–湛江
  1. <?php
  2. define('CACHE_ROOT', dirname(__FILE__).'/cache'); //缓存存放目录
  3. define('CACHE_TIME', 1800);//缓存时间 单位秒
  4. define('CACHE_FIX','.html');
  5. $CacheName=md5($_SERVER['REQUEST_URI']).CACHE_FIX; //缓存文件名
  6. $CacheDir=CACHE_ROOT.'/'.substr($CacheName,0,1);//缓存文件存放目录
  7. $CacheUrl=$CacheDir.'/'.$CacheName;//缓存文件的完整路径
  8. //GET方式请求才缓存,POST之后一般都希望看到最新的结果
  9. if($_SERVER['REQUEST_METHOD']=='GET'){
  10.    //如果缓存文件存在,并且没有过期,就把它读出来。
  11.    if(file_exists($CacheName) && time()-filemtime($CacheName)<CACHE_TIME){
  12.      $fp=fopen($CacheName,'rb');
  13.      fpassthru($fp);
  14.      fclose($fp);
  15.      exit;
  16.    }
  17.    //判断文件夹是否存在,不存在则创建
  18.    elseif(!file_exists($CacheDir)){
  19.      if(!file_exists(CACHE_ROOT)){
  20.        mkdir(CACHE_ROOT,0777);
  21.        chmod(CACHE_ROOT,0777);
  22.      }
  23.      mkdir($CacheDir,0777);
  24.      chmod($CacheDir,0777);
  25.    }
  26.    //回调函数,当程序结束时自动调用此函数
  27.    function AutoCache($contents){
  28.      global $CacheUrl;
  29.      $fp=fopen($CacheUrl,'wb');
  30.      fwrite($fp,$contents);
  31.      fclose($fp);
  32.      chmod($CacheUrl,0777);
  33.      //生成新缓存的同时,自动删除所有的老缓存,以节约空间,可忽略。
  34.      //DelOldCache();
  35.      return $contents;
  36.    }
  37.    function DelOldCache(){
  38.      chdir(CACHE_ROOT);
  39.      foreach (glob('*/*'.CACHE_FIX) as $file){
  40.        if(time()-filemtime($file)>CACHE_TIME)unlink($file);
  41.      }
  42.    }
  43.    //回调函数 auto_cache
  44.    ob_start('AutoCache');
  45. }else{
  46.    //不是GET的请求就删除缓存文件。
  47.    if(file_exists($CacheUrl))unlink($CacheUrl);
  48. }
  49. ?>
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2013-4-12 15:53:38 | 显示全部楼层 来自 中国–北京–北京
o(︶︿︶)o 唉,不懂php,怎么看的懂呢

评分

参与人数 1金币 +5 收起 理由
抢楼评分专号 + 5 很幸运,你获得了抢楼奖励!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-21 18:51 , Processed in 0.046045 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表