喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
 13  1/2  1  2  > 
     
标题: [原创] php缓存类!刚完成!  
 
piaofengnet
中级会员
Rank: 3Rank: 3



UID 82620
精华 0
积分 230
帖子 106
金钱 230 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2006-11-4
状态 离线
[广告]: 代充Paypal帐号美元
php缓存类!刚完成!

<?
/*
程序设计: 林建炫(飘枫设计室)
made in 陆丰 by 2007-03-03 中午
QQ: 5818500
Email: linzhenxuan@163.com
尊重他人也尊重自己!请勿删除该版权信息
如果你使用、修改请保留该信息!
类名称: 缓存使用类
用途: 全局变量、模版
不足地方: 性能没内存共享快!
*/
Class Cls_cache
{
var $dir='cache';//缓存目录
var $auto = true;//是否自动删除过时缓寸,如果缓存文件 大、多 不建议这样做
var $file_list;//文件名
var $dir_name;//目录绝对路径;
var $code = "<?php exit;?>";//加入的代码
var $cache_time = "3600";//缓存时间,默认1小时
        Function __construct()
        {
                //class start;
                //建立目录
                $dir = $this->dir;
                $dir = explode("/",$dir);
                foreach($dir as $a)
                {
                        if($i==0)
                        {
                                $temp .= $a;
                        }
                        else
                        {
                                $temp .= "/".$a;
                        }
                        if(!is_dir($temp))
                        {
                                mkdir($temp);
                        };
                        $i++;
                }
                //自动清除过期缓存文件
                if($this->auto==true){$this->auto();}
                //读取目录文件
                $this->read_file();
        }
        Function read_file()
        {//得到格式 fil1|fil2|fil3|fil4....
                $dir_name = realpath($this->dir);
                $this->dir_name = $dir_name;
                $dir = opendir($dir_name);//打开目录
                while ($file_name = readdir($dir))
                {
                        if(($file_name!=".")&&($file_name!=".."))
                        {
                                $file_list .=$file_name."|";
                        }
                }
                $file_list = substr($file_list,0,(strlen($file_list)-1));
                closedir($dir);
                $this->file_list = $file_list;
                return $file_list;
        }
        Function read($strname)
        {//read('index.php?page=1');
                $strname = md5(trim($strname));
                $list = $this->file_list;
                $re = "/(".$strname.")_([0-9]*)_([0-9]*)[a-zA-Z0-9\.]*/i";
                if(preg_match($re,$list,$match))
                {//找到文件
                        $file = $this->dir_name."\\".$match[0];
                        if($match[2]>$match[3]){unlink($file);return false;}
                        $content = file_get_contents($file);
                        $content = substr($content,strlen($this->code),(strlen($content)-strlen($this->code)));
                        return $content;
                }
        }
        Function write($strname,$content,$cache_time='')
        {
                $strname = md5(trim($strname));
                $list = $this->file_list;
                $time = explode(" ",microtime());
                $time = $time[1];
                if(!$cache_time){$cache_time = $this->cache_time;}
                $cache_time += $time;
                $re = "/(".$strname.")_([0-9]*)_([0-9]*)[a-zA-Z0-9\.]*/i";
                if(preg_match($re,$list,$match))
                {//找到文件
                        $re_file = $this->dir_name."\\".$strname."_".$time."_".$cache_time.".php";
                        $file = $this->dir_name."\\".$match[0];
                        rename($file,$re_file);
                        $content = $this->code.$content;
                        $content = file_put_contents($re_file,$content);
                        $this->read_file();
                        return true;
                }
                else
                {
                        $file = $this->dir_name."\\".$strname."_".$time."_".$cache_time.".php";
                        $content = $this->code.$content;
                        file_put_contents($file,$content);
                        $this->read_file();
                }
        }
        Function delete($strname)
        {
                $strname = md5(trim($strname));
                $list = $this->file_list;
                $re = "/(".$strname.")_([0-9]*)_([0-9]*)[a-zA-Z0-9\.]*/i";
                if(preg_match($re,$list,$match))
                {//找到文件
                        $file = $this->dir_name."\\".$match[0];
                        unlink($file);
                        $this->read_file();
                        return true;
                }else{return false;}
        }
        Function auto()
        {//功能自动清除过期缓存文件
                $list = $this->read_file();
                $re = "/([a-zA-Z0-9]*)_([0-9]*)_([0-9]*)[a-zA-Z0-9\.]*/i";
                if(preg_match_all($re,$list,$match))
                {
                        for($i=0;$i<=(count($match[0])-1);$i++)
                        {
                                $file = $this->dir_name."\\".$match[0][$i];
                                if($match[2][$i]>$match[3][$i]){@unlink($file);$this->read_file();}
                        }
                }
        }
}
//测试代码
$cache = New Cls_cache;
$list =  $cache->file_list;
//$cache->write('content','我是最好的哈哈');
echo $cache->read('content');
?>
这是我刚完成的缓存类!准备用在论坛的缓存!
希望大家多多给意见!觉得好请鼓掌哦!
2007-3-3 12:29 PM#1
查看资料  Blog  发短消息  顶部
 
weile (weile)
注册会员
Rank: 2
初级会员



UID 69253
精华 0
积分 82
帖子 45
金钱 82 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-3-10
状态 离线
[广告]: 代充Paypal帐号美元
谢谢共享!下载学习中~~~
2007-3-3 06:24 PM#2
查看资料  访问主页  发短消息  QQ  顶部
 
游戏人间
版主
Rank: 7Rank: 7Rank: 7
☞风云山庄大少爷☜


UID 62639
精华 2
积分 14534
帖子 7520
金钱 14385 喜悦币
威望 20
人脉 129
阅读权限 100
注册 2004-12-21
来自 广西人在北京
状态 离线
[推荐阅读] 就没有东莞或广州的php招聘吗?
看完前面的版权声明不敢用了.看看我重新敲过一次键盘再用.



 
群号:6025396/6025252/19520091(广西PHP交流/PHP高级编程/算法交流) 寧可在嘗試中失敗,也不在保守中成功! 不為失敗找理由,只為成功找方法! 饿踢Blog
 
2007-3-3 06:59 PM#3
查看资料  访问主页  Blog  发短消息  顶部
 
isno (小仙)
版主
Rank: 7Rank: 7Rank: 7
好想谈恋爱


UID 78818
精华 1
积分 115533
帖子 3989
金钱 113955 喜悦币
威望 10
人脉 1568
阅读权限 100
注册 2006-8-22
状态 离线
[推荐阅读] [北京]PHP软件工程师
想怎么改就怎么改
2007-3-3 07:31 PM#4
查看资料  Blog  发短消息  顶部
 
piaofengnet
中级会员
Rank: 3Rank: 3



UID 82620
精华 0
积分 230
帖子 106
金钱 230 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2006-11-4
状态 离线
[推荐阅读] 新用户不能回复吗?
呵呵,写代码挺辛苦的!
当然自己亲自想出来的就加了版权了!
2007-3-3 10:14 PM#5
查看资料  Blog  发短消息  顶部
 
hszhl
注册会员
Rank: 2



UID 72628
精华 0
积分 55
帖子 49
金钱 55 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-4-30
状态 离线
[推荐阅读] 买本本
建议看下phpsa中的cache部分
2007-3-4 04:39 AM#6
查看资料  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 外资企业高薪急聘PHP/MYSQL 软件工程师
如果可以自动识别内容是否已更新,就更新cache文件部份,效果会更好。缓存时间也就可以去掉了。而且可以保证内容都是最新的。



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2007-3-4 11:12 AM#7
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2571
帖子 4772
金钱 2568 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 请教!!!,大家说怎么实现这个过程?
看到楼主写的就手痒痒
也写了一个 适用于php4:

<?
$cacheDir 
"cache";
$buffer = array();
define("IN_SYS""haha");
class 
cache{
    var 
$itsKey;
    var 
$itsValue;
    
    function 
cache($key ""){
        
$this->itsKey $key;
        
$this->itsValue NULL;
        
$this->load();
    }
    
    function 
load(){
        global 
$cacheDir$buffer;
        if(
"" == $this->itsKey){
            return 
false;
        }
        if(isset(
$buffer[$this->itsKey])){
            
$this->itsValue $buffer[$this->itsKey];
        }else{
            @include(
$cacheDir "/" $this->itsKey ".php");
            if(isset(
$cacheValue)){
                
$this->itsValue $cacheValue;
            }
        }
    }
    
    function 
set($value){
        global 
$cacheDir$buffer;
        if(
"" == $this->itsKey){
            return 
false;
        }
        
$buffer[$this->itsKey] = $value;
        
$fp fopen($cacheDir "/" $this->itsKey ".php""w");
        if(
$fp){
            
fwrite($fp"<?phpnif(!defined(\"IN_SYS\")){exit();}n$cacheValue = " var_export($valuetrue) . "n?>");
            
fclose($fp);
            
chmod($cacheDir "/" $this->itsKey ".php"0666);
        }else{
            return 
false;
        }
    }
    
    function 
get(){
        
$this->load();
        return 
$this->itsValue;
    }
    
    function 
delete(){
        global 
$cacheDir;
        if(
"" == $this->itsKey){
            return 
false;
        }
        if(
file_exists($cacheDir "/" $this->itsKey ".php")){
            
unlink($cacheDir "/" $this->itsKey ".php");
        }
    }
}

function 
cacheRefresh($ttl 0){
    global 
$cacheDir;
    
$dp opendir($cacheDir);
    for(;
1;){
        if(
false !== $file readdir($dp)){
            if(
"." != $file && ".." != $file){
                if(
filectime($cacheDir "/" $file) + $ttl time()){
                    
unlink($cacheDir "/" $file);
                }
            }
        }else{
            break;
        }
    }
}


cacheRefresh(60);
$var = array("fdsa"=>array("fsdfa"));
$cacVar = new cache("var");
//$cacVar->set($var);
print_r($cacVar->get());
?>
判断数据是否被更新 我一般交给数据库类型来做 两个结合起来就行了

[ 本帖最后由 sanders_yao 于 2007-3-4 06:29 PM 编辑 ]
2007-3-4 06:27 PM#8
查看资料  Blog  发短消息  顶部
 
菜鸟也要有理想
中级会员
Rank: 3Rank: 3
一般会员



UID 65342
精华 0
积分 439
帖子 426
金钱 439 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-8-1
状态 离线
[推荐阅读] 新年求新职了,请大家捧场呀
我想要一个类可以把一个数组 或变量生成一个php文件直接引用
2007-3-5 12:18 AM#9
查看资料  发短消息  顶部
 
piaofengnet
中级会员
Rank: 3Rank: 3



UID 82620
精华 0
积分 230
帖子 106
金钱 230 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2006-11-4
状态 离线
[推荐阅读] 谁有ewebeditor,发一份给我
你的想法那就不是缓存类了吧。
那叫程序了。
呵呵,是完全不同的概念哦!
2007-3-5 09:55 AM#10
查看资料  Blog  发短消息  顶部
 13  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.032260 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP