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 相关文章推荐
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
PHP session常见问题集锦及解决办法总结
Mar 18 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
Apr 03 PHP
php部分常见问题总结
Mar 27 PHP
php仿discuz分页效果代码
Oct 02 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
php字符串截取的简单方法
Jul 04 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 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
function.inc.php超越php
2006/12/09 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
angular directive的简单使用总结
2017/05/24 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
JavaScript模块详解
2017/12/18 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
在python shell中运行python文件的实现
2019/12/21 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
技术人员面试提纲
2013/11/28 职场文书
写给老师的表扬信
2014/01/21 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript