• 技术文章 >后端开发 >php教程

    php 文件缓存数据类的代码分享

    2016-07-25 08:57:31原创427
    本文分享一个php文件缓存数据类,写的挺规范挺好的,后面有调用示例。有需要的朋友参考下。

    说到php文件缓存,回顾之前介绍的文章,找到了这么几篇: php 缓存类 调用示例 PHP 数据缓存的实例代码 php 页面缓存类,大家可以参考下。 有了以上对于php 文件缓存的基础,下面开始今天的内容。 代码如下:

    cachePath = $path;  
            }  
        }  
          
        /** 
         * 析构函数 
         */  
        function __destruct() {  
            //nothing  
        }  
          
        /** 
         * 在cache中设置键为$key的项的值,如果该项不存在,则新建一个项 
         * @param string $key 键值 
         * @param mix $var 值 
         * @param int $expire 到期秒数 
         * @param int $flag 标志位 
         * @return bool 如果成功则返回 TRUE,失败则返回 FALSE。 
         * @access public 
         */  
        public function set($key, $var, $expire = 36000, $flag = 0) {  
            $value = serialize($var);  
            $timeout = time() + $expire;  
            $result = safe_file_put_contents($this->cachePath . urlencode($key) .'.cache',  
                    $timeout . '<<%-==-%>>' . $value);  
            return $result;  
        }  
          
        /** 
         * 在cache中获取键为$key的项的值 
         * @param string $key 键值 
         * @return string 如果该项不存在,则返回false 
         * @access public 
         */  
        public function get($key) {  
            $file = $this->cachePath . urlencode($key) .'.cache';  
            if (file_exists($file)) {  
                $content = safe_file_get_contents($file);  
                if ($content===false) {  
                    return false;  
                }  
                $tmp = explode('<<%-==-%>>', $content);  
                $timeout = $tmp[0];  
                $value = $tmp[1];  
                if (time()>$timeout) {  
                    $result = false;  
                } else {  
                    $result = unserialize($value);  
                }  
            } else {  
                $result = false;  
            }  
            return $result;  
        }  
          
        /** 
         * 清空cache中所有项 
         * @return 如果成功则返回 TRUE,失败则返回 FALSE。 
         * @access public 
         */  
        public function flush() {  
            $fileList = FileSystem::ls($this->cachePath,array(),'asc',true);  
            return FileSystem::rm($fileList);  
        }  
          
        /** 
         * 删除在cache中键为$key的项的值 
         * @param string $key 键值 
         * @return 如果成功则返回 TRUE,失败则返回 FALSE。 
         * @access public 
         */  
        public function delete($key) {  
            return FileSystem::rm($this->cachePath . $key .'.cache');  
        }  
    }  
      
    if (!function_exists('safe_file_put_contents')) {  
        function safe_file_put_contents($filename, $content)  
        {  
            $fp = fopen($filename, 'wb');  
            if ($fp) {  
                flock($fp, LOCK_EX);  
                fwrite($fp, $content);  
                flock($fp, LOCK_UN);  
                fclose($fp);  
                return true;  
            } else {  
                return false;  
            }  
        }  
    }  
      
    if (!function_exists('safe_file_get_contents')) {  
        function safe_file_get_contents($filename)  
        {  
            $fp = fopen($filename, 'rb');  
            if ($fp) {  
                flock($fp, LOCK_SH);  
                clearstatcache();  
                $filesize = filesize($filename);  
                if ($filesize > 0) {  
                    $data = fread($fp, $filesize);  
                }  
                flock($fp, LOCK_UN);  
                fclose($fp);  
                return $data;  
            } else {  
                return false;  
            }  
        }  
    }  
    ?>

    调用示例:

    get('yourkey');//yourkey是你为每一个要缓存的数据定义的缓存名字  
    if ($data===false) {  
        $data = '从数据库取出的数据或很复杂很耗时的弄出来的数据';  
        $cache->set('yourkey',$data,3600);//缓存3600秒  
    }  
      
    // use your $data  
    ?>
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 文件缓存数据类的代码分享
    上一篇:php根据时间显示刚刚,几分钟前,几小时前的实现代码 下一篇:php关键词替换的类(避免重复替换,保留与还原原始链接)
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 2022最新浅析PHP特性、内核及架构• 一文详细PHP模板引擎的原理(附代码示例)• 教你创建虚拟主机并运行php项目(phpstudy + wamp)• PHP生成和获取XML格式数据的方法_PHP• 使用PHP实现微信摇一摇周边红包_PHP
    1/1

    PHP中文网