<?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();
?>
int(20)
string(2) "v1"
文件内容:
[root@EM-6CU4525EOH cache]# more b637b17af08aced8850c18cccde915da.php
<?php//000000010v1?>