首页 > php框架 > 一个不错php文件缓存类文件

一个不错php文件缓存类文件

本人给大家推一个不错php文件缓存类文件,从各方面来看本缓存类很合理并且适用于大型网站使用哦,有需要的朋友可参考参考。

<?php
class Cache {
    /** 缓存目录 **/
    var $CacheDir = './c';
    /** 缓存的文件 **/
    var $CacheFile = '';
    /** 文件缓存时间(分钟) **/
    var $CacheTime = 0;
    /** 文件是否已缓存 **/
    var $CacheFound = False;
    /** 错误及调试信息 **/
    var $DebugMsg = NULL;
    function Cache($CacheTime = 0) {
        $this->CacheTime = $CacheTime;
    }
    private function Run() {
        /** 缓存时间大于0,检测缓存文件的修改时间,在缓存时间内为缓存文件名,超过缓存时间为False,
         小于等于0,返回false,并清理已缓存的文件
         *
         */
        Return $this->CacheTime ? $this->CheckCacheFile() : $this->CleanCacheFile();
    }
    function GetCache($VistUrl, $CacheFileType = 'html') {
        $this->SetCacheFile($VistUrl, $CacheFileType);
        $fileName = $this->CheckCacheFile();
        if ($fileName) {
            $fp = fopen($fileName, "r");
            $content_ = fread($fp, filesize($fileName));
            fclose($fp);
            return $content_;
        } else {
            return false;
        }
    }
    private function SetCacheFile($VistUrl, $CacheFileType = 'html') {
        if (empty($VistUrl)) {
            /** 默认为index.html **/
            $this->CacheFile = 'index';
        } else {
            /** 传递参数为$_POST时 **/
            $this->CacheFile = is_array($VistUrl) ? implode('.', $VistUrl) : $VistUrl;
        }
        $this->CacheFile = $this->CacheDir . '/' . md5($this->CacheFile);
        $this->CacheFile.= '.' . $CacheFileType;
    }
    function SetCacheTime($t = 60) {
        $this->CacheTime = $t;
    }
    private function CheckCacheFile() {
        if (!$this->CacheTime || !file_exists($this->CacheFile)) {
            Return False;
        }
        /** 比较文件的建立/修改日期和当前日期的时间差 **/
        $GetTime = (Time() - Filemtime($this->CacheFile)) / (60 * 1);
        /** Filemtime函数有缓存,注意清理 **/
        Clearstatcache();
        $this->Debug('Time Limit ' . ($GetTime * 60) . '/' . ($this->CacheTime * 60) . '');
        $this->CacheFound = $GetTime <= $this->CacheTime ? $this->CacheFile : False;
        Return $this->CacheFound;
    }
    function SaveToCacheFile($VistUrl, $Content, $CacheFileType = 'html') {
        $this->SetCacheFile($VistUrl, $CacheFileType);
        if (!$this->CacheTime) {
            Return False;
        }
        /** 检测缓存目录是否存在 **/
        if (true === $this->CheckCacheDir()) {
            $CacheFile = $this->CacheFile;
            $CacheFile = str_replace('//', '/', $CacheFile);
            $fp = @fopen($CacheFile, "wb");
            if (!$fp) {
                $this->Debug('Open File ' . $CacheFile . ' Fail');
            } else {
                if (@!fwrite($fp, $Content)) {
                    $this->Debug('Write ' . $CacheFile . ' Fail');
                } else {
                    $this->Debug('Cached File');
                };
                @fclose($fp);
            }
        } else {
            /** 缓存目录不存在,或不能建立目录 **/
            $this->Debug('Cache Folder ' . $this->CacheDir . ' Not Found');
        }
    }
    private function CheckCacheDir() {
        if (file_exists($this->CacheDir)) {
            Return true;
        }
        /** 保存当前工作目录 **/
        $Location = getcwd();
        /** 把路径划分成单个目录 **/
        $Dir = split("/", $this->CacheDir);
        /** 循环建立目录 **/
        $CatchErr = True;
        for ($i = 0; $i < count($Dir); $i++) {
            if (!file_exists($Dir[$i])) {
                /** 建立目录失败会返回False 返回建立最后一个目录的返回值 **/
                $CatchErr = @mkdir($Dir[$i], 0777);
            }
            @chdir($Dir[$i]);
        }
        /** 建立完成后要切换到原目录 **/
        chdir($Location);
        if (!$CatchErr) {
            $this->Debug('Create Folder ' . $this->CacheDir . ' Fail');
        }
        Return $CatchErr;
    }
    private function CleanCacheFile() {
        if (file_exists($this->CacheFile)) {
            @chmod($this->CacheFile, 777);
            @unlink($this->CacheFile);
        }
        /** 置没有缓存文件 **/
        $this->CacheFound = False;
        Return $this->CacheFound;
    }
    function Debug($msg = '') {
        if (DEBUG) {
            $this->DebugMsg[] = '[Cache]' . $msg;
        }
    }
    function GetError() {
        Return empty($this->DebugMsg) ? '' : "<br>n" . implode("<br>n", $this->DebugMsg);
    }
} /* end of class */
?>


教程网址:http://www.phprm.com/frame/php1005358.html

欢迎收藏∩_∩但请保留本文链接。

标签:none

发表留言