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

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

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

<?php
/** 
 * 文件缓存类 
 * 
 * @author 志凡  
 * @package cache 
 * @version v0.1
 * edit by bbs.it-home.org
 */  
class FileCache {  
    /** 
     * @var string $cachePath 缓存文件目录 
     * @access public 
     */  
    public $cachePath = './';  
      
    /** 
     * 构造函数 
     * @param string $path 缓存文件目录 
     */  
    function __construct($path = NULL) {  
        if ($path) {  
            $this->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;  
        }  
    }  
}  
?>
登录后复制

调用示例:

代码小浣熊
代码小浣熊

代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节

代码小浣熊 51
查看详情 代码小浣熊
<?php
//php缓存类的例子
$cache = new FileCache();  
$data = $cache->get('yourkey');//yourkey是你为每一个要缓存的数据定义的缓存名字  
if ($data===false) {  
    $data = '从数据库取出的数据或很复杂很耗时的弄出来的数据';  
    $cache->set('yourkey',$data,3600);//缓存3600秒  
}  
  
// use your $data  
?>
登录后复制


PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号