靜態快取

zf6684266發表於2017-07-28
<?php
//封裝靜態快取的儲存,獲取,刪除;呼叫cacheData方法
class File{
	//定義快取的檔案路徑$_dir;
	private $_dir;

      //定義常量EXT為檔案的字尾;
	const EXT = '.php';

	public function __construct(){
		//預設的檔案快取路徑為當前資料夾下的/files/下,首先獲取當前檔案的檔案地址
		$this->_dir = dirname(__FILE__).'/files/';
	}

	/**
	 * @param $key string 檔名稱
	 * @param $value string 快取的內容,如果需要獲取則不需要第二個引數,如需刪除請將該引數設為null
	 * @param $path string 資料夾名稱
	 */
	public function cacheData($key,$value = '',$path = ''){

		$filename = $this->_dir.$path.$key.self::EXT;

		if($value !== ''){
			
			//判斷使用者是否需要刪除快取
			if(is_null($value)){
				return unlink($filename);
			}

			//將value值寫入快取,首先判斷檔案是否存在,不存在則建立
			$dir = dirname($filename);
			if(!is_dir($dir)){
				mkdir($dir,0777);
			}

			//將快取內容寫入檔案
			//file_put_content寫入內容必須為字串
			//如果寫入成功返回寫入位元組數,如果寫入失敗則返回false;
			return file_put_contents($filename,json_encode($value));
		}

		//讀取快取,如果檔案不存在返回false,否則將快取讀取
		if(!is_file($filename)){
			return FALSE;
		}else{
			return json_decode(file_get_contents($filename),true);
		}
	}
}

$data = array(
	'id' => 1,
	'name' => 'xiaozhao',
);

$file = new File();

if($file->cacheData('index_cache',$data)){
	echo 'success';
}else{
	echo 'error';
}

相關文章