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 相关文章推荐
PHP+MYSQL的文章管理系统(一)
Oct 09 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
php调用mysql数据 dbclass类
May 07 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
PHP页面间参数传递的四种方法详解
Jun 09 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
php网页版聊天软件实现代码
Aug 12 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 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和XSS跨站攻击的防范
2007/04/17 PHP
php生成随机数的三种方法
2014/09/10 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
Javascript var变量隐式声明方法
2009/10/19 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中请使用isinstance()判断变量类型
2014/08/25 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python解决八皇后问题示例
2018/04/22 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
Python super()方法原理详解
2020/03/31 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Django多数据库联用实现方法解析
2020/11/12 Python
大学生个人简历中的自我评价
2013/12/27 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
解除劳动合同证明书
2014/09/26 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书