专注于知识
经验、资源的分享

【一个实用的PHP缓存实例】

PHP代码

/* 
用户需要事先定义的常量: 
_CachePath_ 模板缓存路径 
_CacheEnable_ 自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制 
_ReCacheTime_ 自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存 
*/ 

class cache { 

var $cachefile; 
var $cachefilevar; 

function cache() { 
//生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile 
//动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有Cache文件都有相同的文件名,只是扩展名不同 
$s=array(".","/");$r=array("_",""); 
$this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_]; 
$this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]); 
} 

//删除当前页/模块的缓存 
function delete() { 
//删除当前页的缓存 
$d = dir(_CachePath_); 
$strlen=strlen($this->cachefilevar); 
//返回当前页的所有Cache文件组 
while (false !== ($entry = $d->read())) { 
if (substr($entry,0,$strlen)==$this->cachefilevar) { 
if (!unlink(_CachePath_."/".$entry)) {echo "Cache目录无法写入";exit;} 
} 
} 
} 

//判断是否已Cache过,以及是否需要Cache 
function check() { 
//如果设置了缓存更新间隔时间 _ReCacheTime_ 
if (_ReCacheTime_ 0>0) { 
//返回当前页Cache的最后更新时间 
$var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0]; 
//如果更新时间超出更新间隔时间则删除Cache文件 
if (time()-$var>_ReCacheTime_) { 
$this->delete();$ischage=true; 
} 
} 
//返回当前页的Cache 
$file=_CachePath_."/".$this->cachefile; 
//判断当前页Cache是否存在 且 Cache功能是否开启 
return (file_exists($file) and _CacheEnable_ and !$ischange); 
} 

//读取Cache 
function read() { 
//返回当前页的Cache 
$file=_CachePath_."/".$this->cachefile; 
//读取Cache文件的内容 
if (_CacheEnable_) return readfile($file); 
else return false; 
} 

//生成Cache 
function write($output) { 
//返回当前页的Cache 
$file=_CachePath_."/".$this->cachefile; 
//如果Cache功能开启 
if (_CacheEnable_) { 
//把输出的内容写入Cache文件 
$fp=@fopen($file,'w'); 
if (!@fputs($fp,$output)) {echo "模板Cache写入失败";exit;} 
@fclose($fp); 
//如果设置了缓存更新间隔时间 _ReCacheTime_ 
if (_ReCacheTime_ 0>0) { 
//更新当前页Cache的最后更新时间 
$file=_CachePath_."/".$this->cachefilevar; 
$fp=@fopen($file,'w'); 
if (!@fwrite($fp,time())) {echo "Cache目录无法写入";exit;} 
@fclose($fp); 
} 
} 
} 

} 
?> 

使用过程:
PHP代码

define("_CachePath_","./cache/"); 
define("_CacheEnable_","1"); 
define("_ReCacheTime_","43200"); 
include('cache.php'); 
$cache=new cache(); 
if ($cache->check()) { 
$template=$cache->read(); 
}else { 
ob_start(); 
ob_implicit_flush(0); 
?> 
页面内容。。。。 
$template = ob_get_contents(); 
$cache->write($template); 
} 
?> 

缓存在实际使用当中应用很广泛,可以减轻对服务器数据库的访问,提高运行速度。目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率。

赞(0)
未经允许不得转载:立青 » 【一个实用的PHP缓存实例】

评论 20

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    看来老旭这个主题很受欢迎。

    濟川10年前 (2010-12-20)回复
  2. #2

    主题很不错 赞一个~

    李诚10年前 (2010-12-20)回复
  3. #3

    不懂php

    无锡发票10年前 (2010-12-20)回复
  4. #4

    额、换皮了、!

    优趣10年前 (2010-12-20)回复
  5. #5

    呵呵 有点复杂

  6. #6

    好东西,我同学正在学习这个东西哦

    浓农乡情绿色行10年前 (2010-12-20)回复
  7. #7

    学习下PHP

    LifeCandy10年前 (2010-12-21)回复
  8. #8

    博客不错,支持下

  9. #9

    哎呀,看来这个主题不少人都喜欢玩玩啊。
    我把评论加了ajax效果,还是蛮好的。

    世纪之光10年前 (2010-12-21)回复
  10. #10

    谢谢分享

    pcwhy10年前 (2010-12-22)回复
  11. #11

    小子强悍了,都开始研究PHP实例 了。

    Solo10年前 (2010-12-23)回复