• nilcms file类 简单文件缓存实现


    实现简单的文件缓存,参照CI的部分设计,在这里记录一下子。

    class File
    {
        const CACHE_PATH = 'nil_file_cache';
    
        /*其他函数省略了*/
    
        /**
         * 获取缓存文件.
         *
         * @param string  $key  缓存名.
         * 
         * @return string|false
         */
        private static function getCacheFile($key)
        {
            return (empty($key))
                ? false
                : NIL_DATA_PATH.DIRECTORY_SEPARATOR.self::CACHE_PATH.DIRECTORY_SEPARATOR.$key.'.bin';
        }
    
        /**
         * 删除缓存文件.
         * 存在就删除
         *
         * @param string  $key  缓存名.
         * 
         * @return null
         */
        public static function cacheDelete($key)
        {
            /*缓存文件*/
            $file = self::getCacheFile($key);
    
            if( is_file($file) )
            {
                @unlink($file);
            }
        }
    
        /**
         * 获取缓存.
         *
         * @param string  $key  缓存名.
         * 
         * @return mixed|false 结果
         */
        public static function cacheGet($key)
        {
            /*缓存文件*/
            $file = self::getCacheFile($key);
            if( ! is_file($file) )
            {
                return false;
            }
    
            /*读取*/
            $data = @file_get_contents($file);
            if($data === false)
            {
                return false;
            }
            
            /*序列化*/
            $data = @unserialize($data);
    
            /*定义基本的值 未过期*/
            if( ! isset($data['ttl'],$data['time'],$data['data']) || ($data['ttl'] > 0 && time() >  $data['time'] + $data['ttl']) )
            {
                @unlink($file);
                return false;
            }
    
            /*返回*/
            return $data['data'];
        }
    
        /**
         * 生成缓存.
         *
         * @param string  $key  缓存名.
         * @param mixed   $data 数据.
         * 
         * @return bool 是否成功
         */
        public static function cacheSave($key, $data, $time = 0)
        {
            /*路径*/
            $path = self::getCacheFile($key);
            if(false === $path)
            {
                return false;
            }
    
            /*组合数据*/
            $d = [
                'time'  => time(),
                'ttl'   => $time,
                'data'  => $data
            ];
    
            /*写入数据*/
            if(self::write($path, serialize($d)))
            {
                @chmod($path, 0640);
                return true;
            }
            
            return false;
        }
    }
    

      

    df

  • 相关阅读:
    FreeMarker list指令(3.2)
    FreeMarker if指令(3.1)
    FreeMarker FTL常用指令(3)
    FreeMarker模板文件的组成(2)
    FreeMarker语言概述(1)
    动态执行--获取某数据库某表某些字段的唯一值
    Luogu P3403 跳楼机|同余最短路
    Luogu P1640 [SCOI2010]连续攻击游戏|二分图
    **** **** 黑白球|DP
    **** **** 建筑物|DP
  • 原文地址:https://www.cnblogs.com/osfipin/p/7885178.html
Copyright © 2020-2023  润新知