php 文件缓存类

来源:互联网 发布:java filter过滤器 编辑:程序博客网 时间:2024/05/21 11:27
<?php//文件缓存类Class myfilecache {private $path;private static $instance;private function __construct($path){$this->path=$path;}public static function getobj($path){if(!self::$instance)self::$instance=new myfilecache($path);return self::$instance;}private function getFname($key,&$rfn){$fname=md5($key);$rfn=$this->path.$fname.'.php';}/**设置缓存 *参数: 键,值,缓存时间*   返回值:缓存文件大小*/public function set($key,$val,$exp=300){if(!is_numeric($exp)||empty($val))return false;$this->getFname($key,$rfn);$val=is_array($val)?json_encode($val):$val;$exp=sprintf("%09d",$exp);$val="<?php//".$exp.$val."?>";$num=file_put_contents($rfn, $val);return intval($num);}/**获取缓存 *参数: 键*   返回值:缓存内容*/public function get($key){$this->getFname($key,$rfn);$this->getcontent($rfn,$str);return $str;}private function getcontent($fname,&$str,$len=9){$hl=fopen($fname,'r');if($hl){$mtime=filemtime($fname);$exp1=fread($hl,$len+7);$exp1=substr($exp1,7);$exp1=intval($exp1);$exp2=$mtime+$exp1;if(time()>$exp2){fclose($hl);unlink($fname);return false;}else{$str=fread($hl,filesize($fname));$str=substr($str,0,-2);fclose($hl);}}}}?>


实例:

<?php     error_reporting(0);    require_once 'myfilecache.php';    define('FC_PATH', '/data/htdocs/php_test/tp/cache/');function tset(){    fc_init($fc);    var_dump($fc->set('k1','v1',10));    }       function tget()    {    fc_init($fc);    var_dump($fc->get('k1'));    }    function fc_init(&$fc){$cpath=FC_PATH;if(!is_dir($cpath))$rs=mkdir($cpath,0777,true);$fc=myfilecache::getobj($cpath);}    $a=$_GET['a']?$_GET['a']:'tget';    $a(); ?>


http://*****/tp/t.php?a=tset

int(20)


http://*****/tp/t.php

string(2) "v1"



文件内容:

[root@EM-6CU4525EOH cache]# more b637b17af08aced8850c18cccde915da.php <?php//000000010v1?>



0 0