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 相关文章推荐
一个查看session内容的函数
Oct 09 PHP
php的一个登录的类 [推荐]
Mar 16 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
php 判断数组是几维数组
Mar 20 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
Dec 18 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
解决php-fpm.service not found问题的办法
Jun 06 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
php面试实现反射注入的详细方法
Sep 30 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引用地址改变变量值的问题
2012/03/23 PHP
php mysql like 实现多关键词搜索的方法
2016/10/29 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
PHP实现的策略模式示例
2019/03/20 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
python中的二维列表实例详解
2018/06/19 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
python批量修改xml属性的实现方式
2020/03/05 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
苹果台湾官网:Apple台湾
2019/01/05 全球购物
十八届三中全会学习方案
2014/02/16 职场文书
师德师风的心得体会
2014/09/02 职场文书
运动会跳远广播稿
2015/08/19 职场文书
python process模块的使用简介
2021/05/14 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
Python中time标准库的使用教程
2022/04/13 Python
python画条形图的具体代码
2022/04/20 Python