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

一个不错的PHP文件页面缓存类

在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考。

页面缓存类

<?php
/*
 * 缓存类    cache
 * 作    者:多菜鸟
 * 实    例:
*/
/*include( "cache.php" );
    
$cache = new cache(30);   
$cache->cacheCheck();   
    
echo date("Y-m-d H:i:s");   
    
$cache->caching();  */
class cache {
    //缓存目录
    var $cacheRoot = "./cache/";
    //缓存更新时间秒数,0为不缓存
    var $cacheLimitTime = 3;
    //缓存文件名
    var $cacheFileName = "";
    //缓存扩展名
    var $cacheFileExt = "php";
    /*
     * 构造函数
     * int $cacheLimitTime 缓存更新时间
    */
    function cache($cacheLimitTime) {
        if (intval($cacheLimitTime)) $this->cacheLimitTime = $cacheLimitTime;
        $this->cacheFileName = $this->getCacheFileName();
        ob_start();
    }
    /*
     * 检查缓存文件是否在设置更新时间之内
     * 返回:如果在更新时间之内则返回文件内容,反之则返回失败
    */
    function cacheCheck() {
        if (file_exists($this->cacheFileName)) {
            $cTime = $this->getFileCreateTime($this->cacheFileName);
            if ($cTime + $this->cacheLimitTime > time()) {
                echo file_get_contents($this->cacheFileName);
                ob_end_flush();
                exit;
            }
        }
        return false;
    }
    /*
     * 缓存文件或者输出静态
     * string $staticFileName 静态文件名(含相对路径)
    */
    function caching($staticFileName = "") {
        if ($this->cacheFileName) {
            $cacheContent = ob_get_contents();
            //echo $cacheContent;
            ob_end_flush();
            if ($staticFileName) {
                $this->saveFile($staticFileName, $cacheContent);
            }
            if ($this->cacheLimitTime) $this->saveFile($this->cacheFileName, $cacheContent);
        }
    }
    /*
     * 清除缓存文件
     * string $fileName 指定文件名(含函数)或者all(全部)
     * 返回:清除成功返回true,反之返回false
    */
    function clearCache($fileName = "all") {
        if ($fileName != "all") {
            $fileName = $this->cacheRoot . strtoupper(md5($fileName)) . "." . $this->cacheFileExt;
            if (file_exists($fileName)) {
                return @unlink($fileName);
            } else return false;
        }
        if (is_dir($this->cacheRoot)) {
            if ($dir = @opendir($this->cacheRoot)) {
                while ($file = @readdir($dir)) {
                    $check = is_dir($file);
                    if (!$check) @unlink($this->cacheRoot . $file);
                }
                @closedir($dir);
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    /*
     * 根据当前动态文件生成缓存文件名
    */
    function getCacheFileName() {
        return $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])) . "." . $this->cacheFileExt;
    }
    /*
     * 缓存文件建立时间
     * string $fileName   缓存文件名(含相对路径)
     * 返回:文件生成时间秒数,文件不存在返回0
    */
    function getFileCreateTime($fileName) {
        if (!trim($fileName)) return 0;
        if (file_exists($fileName)) {
            return intval(filemtime($fileName));
        } else return 0;
    }
    /*
     * 保存文件
     * string $fileName  文件名(含相对路径)
     * string $text      文件内容
     * 返回:成功返回ture,失败返回false
    */
    function saveFile($fileName, $text) {
        if (!$fileName || !$text) return false;
        if ($this->makeDir(dirname($fileName))) {
            if ($fp = fopen($fileName, "w")) {
                if (@fwrite($fp, $text)) {
                    fclose($fp);
                    return true;
                } else {
                    fclose($fp);
                    return false;
                }
            }
        }
        return false;
    }
    /*
     * 连续建目录
     * string $dir 目录字符串
     * int $mode   权限数字
     * 返回:顺利创建或者全部已建返回true,其它方式返回false
    */
    function makeDir($dir, $mode = "0777") {
        if (!$dir) return 0;
        $dir = str_replace("", "/", $dir);
        $mdir = "";
        foreach(explode("/", $dir) as $val) {
            $mdir.= $val . "/";
            if ($val == ".." || $val == "." || trim($val) == "") continue;
            if (!file_exists($mdir)) {
                if (!@mkdir($mdir, $mode)) {
                    return false;
                }
            }
        }
        return true;
    }
}
?>

上面使用算是页面缓存了,每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)

后来给大家介绍一个Memcache缓存了,算是内存缓存了

代码

<?php
$memcache = new Memcache;
$memcache->connect(localhost, 11211) or die("Could not connect");
$version = $memcache->getVersion();
echo "Servers version: " . $version . "\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = test;
$tmp_object->int_attr = 123;
$memcache->set(key, $tmp_object, false, 10) or die("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)\n";
$get_result = $memcache->get(key);
echo "Data from the cache:\n";
var_dump($get_result);
?>

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。


文章网址:http://www.phprm.com/frame/php1005394.html

随意转载^^但请附上教程地址。

标签:none

发表留言