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 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
收集的php编写大型网站问题集
Mar 06 PHP
简单PHP上传图片、删除图片实现代码
May 12 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
php无序树实现方法
Jul 28 PHP
PHP+JQUERY操作JSON实例
Mar 23 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
PHP关于foreach复制知识点总结
Jan 28 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
JsChart组件使用详解
2018/03/04 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
TensorFlow如何实现反向传播
2018/02/06 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
python可迭代对象去重实例
2020/05/15 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
冰淇淋店的创业计划书
2014/02/07 职场文书
森林防火工作方案
2014/02/14 职场文书
安全宣传标语口号
2014/06/06 职场文书
党员作风建设整改方案
2014/10/27 职场文书
文明单位创建材料
2014/12/24 职场文书
升职自荐信范文
2015/03/27 职场文书
雨中的树观后感
2015/06/03 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python