代码
<?
/*
用户需要事先定义的常量:
_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 );
}
}
}
}
?>
/*
用户需要事先定义的常量:
_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 );
?>
页面内容。。。。
<? php
$template = ob_get_contents ();
$cache -> write( $template );
}
?>
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 );
?>
页面内容。。。。
<? php
$template = ob_get_contents ();
$cache -> write( $template );
}
?>