当前位置 : 主页 > 网络编程 > PHP >

PHP通用緩存方法

来源:互联网 收集:自由互联 发布时间:2021-06-30
/** 通用緩存 說明: 根據傳遞參數的個數用來確認需要進行的操作 若傳遞2個參數,作用是判斷緩存檔是否已經過期 若傳遞3個參數,作用是對內容進行緩存 返回: 若傳遞2個參數: 若未超出緩
/**
  通用緩存
  說明:
    根據傳遞參數的個數用來確認需要進行的操作
    若傳遞2個參數,作用是判斷緩存檔是否已經過期
    若傳遞3個參數,作用是對內容進行緩存
  返回:
    若傳遞2個參數:
      若未超出緩存期,則返回緩存的內容(該內容已解密)
      若超出了緩存期,則返回bool值的FALSE
    若傳遞3個參數:
      對內容進行緩存(傳遞進來的內容未被加密,存儲前要先加密),無返回值
  參數:
    第1個參數:string型,緩存檔
    第2個參數:int型,緩存多少秒
    第3個參數:string型,緩存什麽[可選]
  用法:
    $che[0]=Run.'_cache/_qian_main_0.che';  //緩存檔
    $che[1]=600;              //緩存多少秒
    $che[2]=Fun::Cache($che[0],$che[1]);
    if(!is_bool($che[2])){        //未超出緩存期
      echo '<pre>',var_dump('讀'),'</pre>';
      echo $che[2];
      unset($che);
    }else{                //已超出緩存期
      echo '<pre>',var_dump('寫'),'</pre>';
      $che[2]='???';
      Fun::Cache($che[0],$che[1],$che[2]);
      echo $che[2];
      unset($che);
    }
    //刪除緩存檔
    Fun::Cache(Run.'_super_main_0.che',0,'');
/**/

1. [代码][PHP]代码    

/**
	通用緩存
	說明:
		根據傳遞參數的個數用來確認需要進行的操作
		若傳遞2個參數,作用是判斷緩存檔是否已經過期
		若傳遞3個參數,作用是對內容進行緩存
	返回:
		若傳遞2個參數:
			若未超出緩存期,則返回緩存的內容(該內容已解密)
			若超出了緩存期,則返回bool值的FALSE
		若傳遞3個參數:
			對內容進行緩存(傳遞進來的內容未被加密,存儲前要先加密),無返回值
	參數:
		第1個參數:string型,緩存檔
		第2個參數:int型,緩存多少秒
		第3個參數:string型,緩存什麽[可選]
	用法:
		$che[0]=Run.'_cache/_qian_main_0.che';	//緩存檔
		$che[1]=600;							//緩存多少秒
		$che[2]=Fun::Cache($che[0],$che[1]);
		if(!is_bool($che[2])){				//未超出緩存期
			echo '<pre>',var_dump('讀'),'</pre>';
			echo $che[2];
			unset($che);
		}else{								//已超出緩存期
			echo '<pre>',var_dump('寫'),'</pre>';
			$che[2]='???';
			Fun::Cache($che[0],$che[1],$che[2]);
			echo $che[2];
			unset($che);
		}
		//刪除緩存檔
		Fun::Cache(Run.'_super_main_0.che',0,'');
/**/
public static function Cache(){
	$o=func_get_args();
	if(!is_array($o)){
		throw new exception('Error:'.__LINE__.',必須傳遞參數!');die();
	}


	$count=count($o);

	switch($count){
	case 2:				//判斷緩存是否已經過期(未過期則返回緩存的內容,已過期則返回FALSE)
		//緩存檔是否存在
		if(!file_exists($o[0])){unset($o,$count);return FALSE;}

		//取得上次的修改時間
		$o[3]=filemtime($o[0]);
		$o[3]=(!is_numeric($o[3]) or $o[3]<1) ? 0 : $o[3];

		//緩存期
		if(($_ENV['now']-$o[3])>=$o[1]){unset($o,$count);return FALSE;}

		//返回解密之後的內容
		unset($count);
		return base64_decode(file_get_contents($o[0]));
	case 3:				//對內容進行緩存
		//如果緩存時間小於1,則刪除緩存檔
		if($o[1]<1){
			if(file_exists($o[0])){@unlink($o[0]);}
			unset($o,$count);
			return ;
		}

		//更新緩存
		file_put_contents($o[0],base64_encode('<!--cache start-->'.$o[2].'<!--cache end-->'),LOCK_EX);
		if(file_exists($o[0])){
			chmod($o[0],0777);
		}
		unset($o,$count);
		return ;
	default:
		unset($o,$count);
		throw new exception('Error:'.__LINE__.',參數個數不對!');die();
	}
}
网友评论