zl程序教程

您现在的位置是:首页 >  后端

当前栏目

phpcache类代码(php数据缓存类)

2023-06-13 09:14:18 时间
如果访问量大的话会给数据库造成很大的负担,所以对于变化不经常的内容要做好php数据cache(缓存)是十分必要的,我做了一个简单的php“文件缓存”的类,希望对大家有所帮助。

思路是这样的:

对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了;
对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了;
缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库,返回数据,再更新缓存。(尚未实现)
下面是我的php-kcache类(php_kcache_class.php):
注:如果是缓存字符串,请把转义字符多写一个"\",即”\n”要写成”\\n”。
复制代码代码如下:

/*
//php-kcacheclassv_0.1
//Author:kangzj
//Email:kangzj@mail.bnu.edu.cn
//Blog:http://kangzj.net.ru
//作者不保证本程序没有bug,对于使用本程序
//而引起的任何问题不担负任何责任。
*/
classphp_kcache{
    //相对或者绝对目录,末尾不要加"/"
    var$cache_dir="./cache";
    var$cache_extension=".cache.php";

    functionset_cache($name,$value){
        $pre="<?\n//CacheCreatedat:".date("Y-m-dH: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);
            returntrue;
        }else{
            echo$cache_file;
            exit("Cannotwritetocachefiles,pleasecheckcachedirectory");
            returnfalse;
        }
    }

    //将array变成字符串,来自discuz!
    functionarrayeval($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($arrayas$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=newphp_kcache;
$a=array("a","b","c");
$pc->set_cache("a",addslashes($a));

复杂的调用方法(加上缓存时间控制的)——稍后补上….tobecontinued…