[原创]基于Kohana v2.3.4的静态缓存类_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > [原创]基于Kohana v2.3.4的静态缓存类

[原创]基于Kohana v2.3.4的静态缓存类

 2010/9/19 23:34:09  漫无目的  http://soyota2004-126-com.javaeye.com  我要评论(0)
  • 摘要:因为之前做一个小项目的时候,发现Kohana貌似没有静态缓存类或库,或我没找到...于是自己写了一个,只在v2.3.4内测试过,v3请自测或改装东西是很简单的东西,还是有改进的余地,各位看官自改吧.<?php/***@namePageCache页面缓存类库*@accesspublic*@author漫无目的(soyota@gmail.com)*@versionv0.1.1alpha*================*缓存打开时,构造方法会尝试获取缓存,并输出,否则不缓存*使用方法:*1
  • 标签:原创 Kohana 静态缓存类

因为之前做一个小项目的时候,发现Kohana貌似没有静态缓存类或库,或我没找到...

于是自己写了一个,只在v2.3.4内测试过,v3请自测或改装

东西是很简单的东西,还是有改进的余地,各位看官自改吧.

?

<?php
/**
* @name Page Cache 页面缓存类库
* @access public
* @author 漫无目的(soyota@gmail.com)
* @version v0.1.1 alpha
* ================
* 缓存打开时,构造方法会尝试获取缓存,并输出,否则不缓存
* 使用方法:
* 1.打开 application/config/pagecache.php 进行配置
* 2.在controller构造方法内实例本类
* 3.在controller内的function内部*末尾*,增加:$this->template->render(TRUE);\n$this->pageCache->endCache();
*
* 变更为单例模式,增加单独controller缓存功能
* $this->pageCache = PageCache::Init(TRUE); //参数留空表示本controller不需要缓存
*
* 注:application/pageCache目录请设置为755权限
*
*/
ob_start();
class PageCache_Core {
    protected $cache_dir;   // 缓存目录
    protected $lifeTime;    // 缓存过期时间
    protected $file;        // 缓存目录和缓存文件(URI加MD5后)
    public $pageCache_open; // 缓存开关
    private static $_init;

    private function __construct($isOpen = FALSE) {
        $this->pageCache_open = ($isOpen) ? $isOpen : Kohana::config('pagecache.pageCache_open');
        $this->cache_dir = Kohana::config('pagecache.pageCache_dir');
        $this->lifeTime = Kohana::config('pagecache.pageCache_lifeTime') * 3600;
        $this->file = $this->cache_dir . md5(urlencode(url::current()));
        if($this->pageCache_open) {
            $this->_start();
        }
    }

    public static function Init($isOpen = FALSE) {
        if(!self::$_init) {
            self::$_init = new PageCache_Core($isOpen);
        }
        return self::$_init;
    }

    /**
     * 缓存动作开始:检测缓存
     * @access private
     */
    private function _start() {
        // 如果缓存文件存在,且存活时间未过期。**不需要更新缓存,直接输入缓存**
        if(file_exists($this->file) AND (filemtime($this->file) + $this->lifeTime) > time()) {
            $this->_getCache();
        }
    }

    /**
     * 将数据写入缓存数据
     * @access private
     */
    private function _setCache($pageData) {
        if(file_put_contents($this->file, $pageData, LOCK_EX)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取缓存数据
     * @access private
     */
    private function _getCache() {
        $data = file_get_contents($this->file);
        if($data) {
            echo $data;
        } else {
            $this->_ERROR('无法获取缓存数据');
        }
        ob_end_flush();
        exit();
    }

    /**
     * 本方法应该放置在代码末尾,使其设置缓存并显示
     */
    public function endCache() {
        if($this->pageCache_open) {
            $pageData = ob_get_contents();
            $this->_setCache($pageData);
            ob_end_flush();
            exit();
        } else { // 缓存关闭
            ob_end_flush();
            exit();
        }
    }

    /**
     * 异常抛出
     * @access private
     * @param string $errMSG
     * @return void
     */
    private function _ERROR($errMSG) {
        if(is_string($errMSG)) {
            echo '发生错误:' . $errMSG;
        }
    }
}
?>

?

发表评论
用户名: 匿名