下面是我为实现这个功能写的一个类。
<?php
class iCache
{
var $caches;
var $cachetable = 'site_cache';
var $cachename = 'cache';
var $cachetime = 'dateline';
var $cachecontent = 'content';
var $functionfile = 'function.cache.php';
function iCache($caches,$cachetable='',$cachename='',$cachecontent='',$cachetime='') {
global $db;
if ($cachetable!="" && $cachetable!=null) {
$this->cachetable = $cachetable;
}
if ($cachename!="" && $cachename!=null) {
$this->cachename = $cachename;
}
if ($cachetime!="" && $cachetime!=null) {
$this->cachetime = $cachetime;
}
if ($cachecontent!="" && $cachecontent!=null) {
$this->cachecontent = $cachecontent;
}
$query = $db->query("SELECT {$this->cachename},{$this->cachecontent},{$this->cachetime} FROM {$this->cachetable} WHERE $this->cachename IN ({$caches})");
while($rs = $db->fields($query)) {
$this->caches[$rs[$this->cachename]] = $rs;
}
}
function setFunctionFile($functionfile) {
$this->functionfile = $functionfile;
}
function cache($cachename,$cachetime) {
global $timestamp;
if ($this->caches[$cachename]
&& $this->caches[$cachename][$this->cachecontent]!=""
&& ($timestamp - $this->caches[$cachename][$this->cachetime])<$cachetime) {
return unserialize($this->caches[$cachename][$this->cachecontent]);
} else {
return $this->reCache($cachename);
}
}
function reCache($cachename) {
global $db,$timestamp;
require_once($this->functionfile);
if (@function_exists($cachename)) {
if ($cachecontent = $cachename()) {
$db->query("REPLACE INTO {$this->cachetable} ({$this->cachename},{$this->cachecontent},{$this->cachetime}) VALUES ('$cachename','".addslashes(serialize($cachecontent))."','$timestamp')");
return $cachecontent;
} else {
return "{$cachename}() cat't cached content";
}
} else {
return "Can't load cache function {$cachename}()";
}
}
}
class iCache
{
var $caches;
var $cachetable = 'site_cache';
var $cachename = 'cache';
var $cachetime = 'dateline';
var $cachecontent = 'content';
var $functionfile = 'function.cache.php';
function iCache($caches,$cachetable='',$cachename='',$cachecontent='',$cachetime='') {
global $db;
if ($cachetable!="" && $cachetable!=null) {
$this->cachetable = $cachetable;
}
if ($cachename!="" && $cachename!=null) {
$this->cachename = $cachename;
}
if ($cachetime!="" && $cachetime!=null) {
$this->cachetime = $cachetime;
}
if ($cachecontent!="" && $cachecontent!=null) {
$this->cachecontent = $cachecontent;
}
$query = $db->query("SELECT {$this->cachename},{$this->cachecontent},{$this->cachetime} FROM {$this->cachetable} WHERE $this->cachename IN ({$caches})");
while($rs = $db->fields($query)) {
$this->caches[$rs[$this->cachename]] = $rs;
}
}
function setFunctionFile($functionfile) {
$this->functionfile = $functionfile;
}
function cache($cachename,$cachetime) {
global $timestamp;
if ($this->caches[$cachename]
&& $this->caches[$cachename][$this->cachecontent]!=""
&& ($timestamp - $this->caches[$cachename][$this->cachetime])<$cachetime) {
return unserialize($this->caches[$cachename][$this->cachecontent]);
} else {
return $this->reCache($cachename);
}
}
function reCache($cachename) {
global $db,$timestamp;
require_once($this->functionfile);
if (@function_exists($cachename)) {
if ($cachecontent = $cachename()) {
$db->query("REPLACE INTO {$this->cachetable} ({$this->cachename},{$this->cachecontent},{$this->cachetime}) VALUES ('$cachename','".addslashes(serialize($cachecontent))."','$timestamp')");
return $cachecontent;
} else {
return "{$cachename}() cat't cached content";
}
} else {
return "Can't load cache function {$cachename}()";
}
}
}