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
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
PHP学习之数组值的操作
Apr 17 PHP
php在文件指定行中写入代码的方法
May 23 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
PHP数组操作类实例
Jul 11 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 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
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
解析JavaScript中的标签语句
2013/06/19 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
js里面的变量范围分享
2020/07/18 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
python基础教程之对象和类的实际运用
2014/08/29 Python
python 基础教程之Map使用方法
2017/01/17 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python中实现字符串翻转的方法
2018/07/11 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
专科毕业生学习生活的自我评价
2013/10/26 职场文书
教室布置标语
2014/06/26 职场文书
会计个人实习计划书
2014/08/15 职场文书
2014年科室工作总结
2014/11/20 职场文书
用人单位聘用意向书
2015/05/11 职场文书
党性修养心得体会2016
2016/01/21 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python