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 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
php中Snoopy类用法实例
Jun 19 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
PHP实现递归无限级分类
Oct 22 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
PHP autoload使用方法及步骤详解
Sep 05 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 urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
接口的多继承会带来哪些问题
2015/08/17 面试题
企业为何需要商业计划书
2013/12/26 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
班班通校本培训方案
2014/03/12 职场文书
主题教育活动总结
2014/05/05 职场文书
暑期教师培训方案
2014/06/07 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
java解析XML详解
2021/07/09 Java/Android
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android
Ruby处理CSV数据方法详解
2022/04/18 Ruby
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL