php cache类代码(php数据缓存类)


Posted in PHP onApril 15, 2010

如果访问量大的话会给数据库造成很大的负担,所以对于变化不经常的内容要做好php 数据cache(缓存)是十分必要的,我做了一个简单的php“文件缓存”的类,希望对大家有所帮助。

思路是这样的:

对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了;
对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了;
缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库,返回数据,再更新缓存。(尚未实现)
下面是我的php-kcache类(php_kcache_class.php):
注:如果是缓存字符串,请把转义字符多写一个'\',即”\n”要写成”\\n”。

/* 
//php-kcache class v_0.1 
//Author: kangzj 
//Email : kangzj@mail.bnu.edu.cn 
//Blog : http://kangzj.net.ru 
//作者不保证本程序没有bug,对于使用本程序 
//而引起的任何问题不担负任何责任。 
*/ 
class php_kcache { 
    //相对或者绝对目录,末尾不要加 '/' 
    var $cache_dir = './cache'; 
    var $cache_extension = '.cache.php';     function set_cache($name, $value){ 
        $pre = "< ?\n//Cache Created at: ".date('Y-m-d H:i:s')."\n"; 
        if(!is_array($value)){ 
            $value = $value; 
            $str = "\$$name = '$value';"; 
        }else{ 
            $str = "\$$name = " . $this->arrayeval($value) . ';'; 
        } 
        $end = "\n?>"; 
        echo $cache = $pre . $str . $end; 
        $cache_file = $this->cache_dir . '/' . $name . $this->cache_extension; 
        if($fp = @fopen($cache_file, 'wb')) { 
            fwrite($fp, $cache); 
            fclose($fp); 
            return true; 
        } else { 
            echo $cache_file; 
            exit('Can not write to cache files, please check cache directory '); 
            return false; 
        } 
    } 
    //将array变成字符串, 来自discuz! 
    function arrayeval($array, $level = 0) { 
        if(!is_array($array)) { 
            return "'".$array."'"; 
        } 
        $space = ''; 
        for($i = 0; $i < = $level; $i++) { 
            $space .= "\t"; 
        } 
        $evaluate = "Array\n$space(\n"; 
        $comma = $space; 
        if(is_array($array)) { 
            foreach($array as $key => $val) { 
                $key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key; 
                $val = !is_array($val) && (!preg_match("/^\-?[1-9]\d*$/", $val) || strlen($val) > 12) ? '\''.addcslashes($val, '\'\\').'\'' : $val; 
                if(is_array($val)) { 
                    $evaluate .= "$comma$key => ".arrayeval($val, $level + 1); 
                } else { 
                    $evaluate .= "$comma$key => $val"; 
                } 
                $comma = ",\n$space"; 
            } 
        } 
        $evaluate .= "\n$space)"; 
        return $evaluate; 
    } 
}

最简单的调用方法:
include './php_kcache_class.php'; 
$pc = new php_kcache; 
$a = array('a', 'b', 'c'); 
$pc->set_cache('a', addslashes($a));

复杂的调用方法(加上缓存时间控制的)——稍后补上….to be continued…
PHP 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
php使用百度天气接口示例
Apr 22 PHP
php异步多线程swoole用法实例
Nov 14 PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 PHP
php实现格式化多行文本为Js可用格式
Apr 15 PHP
php精确的统计在线人数的方法
Oct 21 PHP
初识ThinkPHP控制器
Apr 07 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
Apr 15 #PHP
php 格式化数字的时候注意数字的范围
Apr 13 #PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
Apr 13 #PHP
php 上传功能实例代码
Apr 13 #PHP
php array_search() 函数使用
Apr 13 #PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 #PHP
php读取javascript设置的cookies的代码
Apr 12 #PHP
You might like
PHP中动态HTML的输出技术
2006/10/09 PHP
基于PHP生成静态页的实现方法
2013/05/10 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python获取android设备的GPS信息脚本分享
2015/03/06 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
python获取引用对象的个数方式
2019/12/20 Python
django迁移文件migrations的实现
2020/03/31 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
我的五年职业生涯规划
2014/01/23 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
初级党校心得体会
2014/09/11 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
升职自荐信怎么写
2015/03/05 职场文书
我是特种兵观后感
2015/06/11 职场文书
2016高考冲刺决心书
2015/09/23 职场文书