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 pack与unpack 摸板字符字符含义
Oct 29 PHP
PHP备份/还原MySQL数据库的代码
Jan 06 PHP
第四章 php数学运算
Dec 30 PHP
基于Zend的Captcha机制的应用
May 02 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
Thinkphp中数据按分类嵌套循环实现方法
Oct 30 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
php处理静态页面:页面设置缓存时间实例
Jun 22 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
js Calender控件使用详解
2015/01/05 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
移动端界面的适配
2017/01/11 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python3基于TCP实现CS架构文件传输
2018/07/28 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
Django用户身份验证完成示例代码
2020/04/03 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
python调用win32接口进行截图的示例
2020/11/11 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
道路交通安全实施方案
2014/03/12 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
单位租房协议书样本
2014/10/30 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
保护动物的宣传语
2015/07/13 职场文书
详解NodeJS模块化
2021/06/15 NodeJs
JavaScript实现栈结构详细过程
2021/12/06 Javascript
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL