Ectouch中缓存管理函数

 
0 2163
泡沫随风飘
2015-09-05 09:45

Ectouch中缓存管理函数

在做Ectouch开发时,需要用到缓存函数,虽然有write_static_cache($cache_name, $caches)read_static_cache($cache_name)函数,但是不能设置缓存期限。
参照Thinkphp里的S缓存管理函数写了个类似的函数s_cache()替代,代码如下:

/**

 * 缓存管理

 * @param mixed $name 缓存名称

 * @param mixed $value 缓存值

 * @param mixed $expire 缓存期限 秒为单位 ,0为永久缓存

 * @return mixed

 */

function s_cache($name,$value='',$expire=0) {

    if ((DEBUG_MODE & 2) == 2) {//调试模式不使用缓存

        return false;

    }

    static $_cache  =   array();//静态存储

    $name=md5($name);

    $filename =  ROOT_PATH . 'data/cache/expire/'. $name . '.php';

    if(''=== $value){ // 读取缓存

        if (!is_file($filename)) {

            return false;

        }

        if (isset($_cache[$name])){

            $content= $_cache[$name];

        }else{

            $content    =   file_get_contents($filename);

            $_cache[$name]=$content;

        }

        if( false !== $content) {

            $expire  =  (int)substr($content,8, 12);

            if($expire != 0 && time() > filemtime($filename) + $expire) {//检查缓存是否过期

                //缓存过期删除缓存文件

                unlink($filename);

                return false;

            }

            $content   =  substr($content,20, -3);

            $content    =   unserialize($content);

            return $content;

        }else {

            return false;

        }

    }elseif(is_null($value)) { // 删除

        unlink($filename);

    }else { // 缓存写入

        $cache_dir =  dirname($filename);

        if(!is_dir($cache_dir))

            mkdir($cache_dir,0777,true);

        $expire=is_numeric($expire)?$expire:0;

        $data   =   serialize($value);

        $data    = "<?php\n//".sprintf('%012d',$expire).$data."\n?>";

        $_cache[$name] = $data;

        $result  =   file_put_contents($filename,$data,LOCK_EX);

        if($result) {

            return true;

        }else {

            return false;

        }

    }

}

本文内容由互联网用户自发贡献,版权归作者所有,本站不拥有所有权也不承担相关法律责任。如需转载请按以下形式注明来源: 复制

文章来源:阿里云牛优惠资讯网
文章标题:Ectouch中缓存管理函数
原文地址:https://aliyunnew.com/a/68.html
发布时间:2015-09-05 09:45
相关话题
没有相关话题
猜您喜欢
没有相关数据
回帖
  • 抢占沙发~~