簡單實(shí)用的網(wǎng)站PHP緩存類實(shí)例
緩存技術(shù)在實(shí)際使用當(dāng)中應(yīng)用非常廣泛,可以有效減輕對服務(wù)器數(shù)據(jù)庫的訪問壓力,提高運(yùn)行速度。目前很多CMS內(nèi)容管理系統(tǒng)中頻繁使用緩存機(jī)制來提高系統(tǒng)運(yùn)行的效率。本文以一個(gè)簡單實(shí)用的緩存類為例,幫助大家參考下緩存的機(jī)制與寫法。
緩存文件cache.php代碼如下:
<?php
/*
用戶需要事先定義的常量:
_CachePath_ 模板緩存路徑
_CacheEnable_ 自動(dòng)緩存機(jī)制是否開啟,未定義或?yàn)榭?,表示關(guān)閉自動(dòng)緩存機(jī)制
_ReCacheTime_ 自動(dòng)重新緩存間隔時(shí)間,單位為秒,未定義或?yàn)榭?,表示關(guān)閉自動(dòng)重新緩存
*/
class cache
{
var $cachefile;
var $cachefilevar;
function cache()
{
//生成當(dāng)前頁的Cache組文件名 $this->cachefilevar 及文件名 $this->cachefile
//動(dòng)態(tài)頁的參數(shù)不同對應(yīng)的Cache文件也不同,但是每一個(gè)動(dòng)態(tài)頁的所有Cache文件都有相同的文件名,只是擴(kuò)展名不同
$s=array(".","/");$r=array("_","");
$this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];
$this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);
}
//刪除當(dāng)前頁/模塊的緩存
function delete()
{
//刪除當(dāng)前頁的緩存
$d = dir(_CachePath_);
$strlen=strlen($this->cachefilevar);
//返回當(dāng)前頁的所有太原264醫(yī)院Cache文件組
while (false !== ($entry = $d->read()))
{
if (substr($entry,0,$strlen)==$this->cachefilevar)
{
if (!unlink(_CachePath_."/".$entry)) {echo "Cache目錄無法寫入";exit;}
}
}
}
//判斷是否已Cache過,以及是否需要Cache
function check()
{
//如果設(shè)置了緩存更新間隔時(shí)間 _ReCacheTime_
if (_ReCacheTime_+0>0)
{
//返回當(dāng)前頁Cache的最后更新時(shí)間
$var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];
//如果更新時(shí)間超出更新間隔時(shí)間則刪除Cache文件
if (time()-$var>_ReCacheTime_)
{
$this->delete();$ischage=true;
}
}
//返回當(dāng)前頁的Cache
$file=_CachePath_."/".$this->cachefile;
//判斷當(dāng)前頁Cache是否存在 且 Cache功能是否開啟
return (file_exists($file) and _CacheEnable_ and !$ischange);
}
//讀取Cache
function read()
{
//返回當(dāng)前頁的Cache
$file=_CachePath_."/".$this->cachefile;
//讀取Cache文件的內(nèi)容
if (_CacheEnable_) return readfile($file);
else return false;
}
//生成Cache
function write($output)
{
//返回當(dāng)前頁的Cache
$file=_CachePath_."/".$this->cachefile;
//如果Cache功能開啟
if (_CacheEnable_)
{
//把輸出的內(nèi)容寫入Cache文件
$fp=@fopen($file,'w');
if (!@fputs($fp,$output)) {echo "模板Cache寫入失敗";exit;}
@fclose($fp);
//如果設(shè)置了緩存更新間隔時(shí)間 _ReCacheTime_
if (_ReCacheTime_+0>0)
{
//更新當(dāng)前頁Cache的最后更新時(shí)間
$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);
?>
此處為頁面內(nèi)容。。。。
<?php
$template = ob_get_contents();
$cache->write($template);
}
?>
相關(guān)文章
php將mysql數(shù)據(jù)庫整庫導(dǎo)出生成sql文件的具體實(shí)現(xiàn)
下面是php將mysql數(shù)據(jù)庫整庫導(dǎo)出生成sql文件的詳細(xì)代碼,希望對大家在用php編程時(shí)備份數(shù)據(jù)有一定幫助2014-01-01
使用PHPMailer實(shí)現(xiàn)郵件的實(shí)時(shí)發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了如何使用PHPMailer 實(shí)現(xiàn)一個(gè)接收詢盤并實(shí)時(shí)同步到指定郵箱的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-12-12
php實(shí)現(xiàn)數(shù)組縱向轉(zhuǎn)橫向并過濾重復(fù)值的方法分析
這篇文章主要介紹了php實(shí)現(xiàn)數(shù)組縱向轉(zhuǎn)橫向并過濾重復(fù)值的方法,結(jié)合具體實(shí)例形式對比分析了php針對數(shù)組遍歷、轉(zhuǎn)換與去重相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
php中用socket模擬http中post或者get提交數(shù)據(jù)的示例代碼
以下是對php中用socket模擬http中post或者get提交數(shù)據(jù)的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下2013-08-08
php不用內(nèi)置函數(shù)對數(shù)組排序的兩個(gè)算法代碼
php不用內(nèi)置函數(shù)對數(shù)組排序,可能是降序或者升序2010-02-02
PHP項(xiàng)目多語言配置平臺實(shí)現(xiàn)過程解析
這篇文章主要介紹了PHP項(xiàng)目多語言配置平臺實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05

