<?php /* $cache = new Cache("../cache/",20); // 构造函数,创建缓存类对象 ……………………………… ……………………………… ……………………………… $cache->PutCache(); // 倒出缓存 */ class Cache { private $CacheDir = ’Cache’; /* 缓存目录 */ private $SetTimeOut = 10; /* 缓存过期时间 */ private $SetExt = ’.cache’; /* 缓存文件后缀名 */ private $CacheFileUrl = ’’; /* 缓存文件所在地址 */ private $CacheConfigFile = ’’; /* 缓存文件配置信息 */
public $LastUnixTimePoke = 0; /* 上一次缓存的 Unix 时间戳 */ public $CurrentUnixTimePoke = 0;/* 当前缓存的 Unix 时间戳 */ public $NextUnixTimePoke = 0; /* 下一次缓存的 Unix 时间戳 */ public $UnixNowToNext = 0; /* 现在和下一次缓存相差的 Unix 时间戳 */
public $LastTimePoke = 0; /* 上一次缓存的时间 */ public $CurrentTimePoke = 0;/* 当前缓存的时间 */ public $NextTimePoke = 0; /* 下一次缓存的时间 */
public $DataLength = 0; /* 缓存区内容长度 */ public $CacheToPage = ’’; /* 缓存文件内容 */ private $SplitTeam = false; /* 是否分组存放Cache文件 */
public $Cache = false; /* 是否需要缓存,用户外界判断 */
private $_IsCache = false; /* 是否能够缓存 */
public function Cache($SetTimeOut = 20,$CacheDir = ’Cache’,$SplitTeam = false,$SetExt = ’.cache’) { $this->CacheDir = $CacheDir; $this->SplitTeam = $SplitTeam; if(!is_numeric($SetTimeOut)) { $this->ErrResponse(’缓存过期时间设置无效’); return false; } else { $this->SetTimeOut = $SetTimeOut; } $this->SetExt = $SetExt;
/* 缓存开始 */ ob_clean(); ob_start(); ob_implicit_flush(0); $this->CreateCache(); return true; }
private function CreateCache() { $_CacheFile = str_replace(’.’,’_’,basename($_SERVER[’PHP_SELF’])) . ’_’ . md5(basename($_SERVER[’PHP_SELF’])) . $this->SetExt; $_CacheConfig = str_replace(’.’,’_’,basename($_SERVER[’PHP_SELF’])) . ’_’ . ’.cof’;
if(!file_exists($this->CacheDir)) {
mkdir($this->CacheDir,0777); }
if($this->SplitTeam) { $_CacheConfigDir = $this->CacheDir . str_replace(’.’,’_’,basename($_SERVER[’PHP_SELF’])) . ’_/’; if(!file_exists($_CacheConfigDir)) { mkdir($_CacheConfigDir,0777); } $_CacheUrl = $this->CacheDir . $_CacheConfigDir . $_CacheFile; $_CacheConfigUrl = $this->CacheDir . $_CacheConfigDir . $_CacheConfig; } else { $_CacheUrl = $this->CacheDir . $_CacheFile; $_CacheConfigUrl = $this->CacheDir . $_CacheConfig; }
if(!file_exists($_CacheUrl)) { $hanld = @fopen($_CacheUrl,"w"); @fclose($hanld); }
if(!file_exists($_CacheConfigUrl)) { $hanld = @fopen($_CacheConfigUrl,"w"); @fclose($hanld); }
$this->CacheConfigFile = $_CacheConfigUrl; $this->CacheFileUrl = $_CacheUrl; $this->CheckCache(); return true; }
private function CheckCache() { $_FileEditTime = @filemtime($this->CacheFileUrl); $_TimeOut = $this->SetTimeOut; $_IsTimeOut = $_FileEditTime $_TimeOut;
$this->LastUnixTimePoke = $_FileEditTime; $this->NextUnixTimePoke = $_IsTimeOut; $this->CurrentUnixTimePoke = time(); $this->UnixNowToNext = $this->NextUnixTimePoke - time();
$this->LastTimePoke = date("Y-m-d H:i:s",$_FileEditTime); $this->NextTimePoke = date("Y-m-d H:i:s",$_IsTimeOut); $this->CurrentTimePoke = date("Y-m-d H:i:s",time());
$_TxtInformation = "上次缓存时间戳: $this->LastUnixTimePoke "; $_TxtInformation .= "当前缓存时间戳: $this->CurrentUnixTimePoke "; $_TxtInformation .= "下次缓存时间戳: $this->NextUnixTimePoke ";
$_TxtInformation .= "上次缓存时间: $this->LastTimePoke "; $_TxtInformation .= "当前缓存时间: $this->CurrentTimePoke "; $_TxtInformation .= "下次缓存时间: $this->NextTimePoke ";
$_TxtInformation .= "距离下次缓存戳: $this->UnixNowToNext ";
$handl = @fopen($this->CacheConfigFile,’w’); if($handl) { @fwrite($handl,$_TxtInformation); @fclose($handl); }
if($_IsTimeOut >= time()) { $this->GetCacheData(); } }
private function ClearCacheFile() { @unlink($this->CacheFileUrl); @unlink($this->CacheConfigFile); }
public function PutCache() { $this->DataLength = ob_get_length(); $PutData = ob_get_contents(); if(!file_exists($this->CacheFileUrl)) { $CreateOK = $this->CreateCache(); if(!$CreateOK) { $this->ErrResponse(’检查缓存文件时产生错误,缓存文件创建失败’); return false; } } else { $hanld = @fopen($this->CacheFileUrl,"w"); if($hanld) {
if(@is_writable($this->CacheFileUrl)) { @flock($hanld, LOCK_EX); $_PutData = @fwrite($hanld,$PutData); @flock($hanld, LOCK_UN); if(!$_PutData) { $this->ErrResponse(’无法更改当前缓存文件内容’); return false; } else { @fclose($hanld); return true; } } else { $this->ErrResponse(’缓存文件不可写’); return false; } } else {
$this->ErrResponse(’打开缓存文件发生致命错误’); return false; } } }
public function GetCacheData() { $hanld = @fopen($this->CacheFileUrl,"r"); if($hanld) { if(@is_readable($this->CacheFileUrl)) { $this->CacheToPage = @file_get_contents($this->CacheFileUrl); $IsEmpty = count(file($this->CacheFileUrl)); //判断缓存文件是否为空
if($IsEmpty > 0) { echo $this->CacheToPage; @fclose($hanld); ob_end_flush(); exit(); } } else { $this->ErrResponse(’读取缓存文件内容失败’); return false;
} } else { $this->ErrResponse(’打开缓存文件失败’); return false; } }
private function ErrResponse($Msg) { echo $Msg; } } ?>
|