php 文件缓存类

<?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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值