文档章节

【PHP】缓存技术!缓存类,看看原理吧

RablePHP
 RablePHP
发布于 2016/08/08 15:39
字数 470
阅读 35
收藏 1
<?php

	

	/**
	* 	缓存
	*/
	class Cache
	{

		private $cachedir	=	'./cache/'; //目录
		private $cachetime  =	0;			//更新时间
		private $cachename	=	"";			//文件名称
		private $cachefile	=	".php";		//文件后缀名
		


		function __construct($cachetime)
		{
			if(intval($cachetime)){
				$this->cachetime =$cachetime;
				$this->cachename=$this->getFileName();
				ob_start();
			}
		}

		/**
		 * [cacheCheck 检测缓存是否过期]
		 * @return [type] [description]
		 */
		public function cacheCheck($name=''){
			$name=$this->pathSet($name);
			if(file_exists($name))
			{
				$ctime=$this->createCacheTime($name);
				if ($ctime+$this->cachetime>time()) {
					echo "【以下为缓存】";
					echo file_get_contents($name);
					ob_end_flush();

					exit();
				}
			}
			elseif(file_exists($this->cachename))
			{
				$ctime=$this->createCacheTime($this->cachename);
				if ($ctime+$this->cachetime>time()) {
					echo "【以下为缓存】";
					echo file_get_contents($this->cachename);
					ob_end_flush();

					exit();
				}
			}
			return false;
		}
		/**
		 * [pathSet 名称格式化]
		 * @param  [type] $name [description]
		 * @return [type]       [description]
		 */
		public function pathSet($name){
			return "./".$name;
		}
		/**
		 * [putCache 写出缓存]
		 * @param  string $name [description]
		 * @return [type]       [description]
		 */
		public function putCache($name=''){
			if ($this->cachename) {

				$content =	ob_get_contents(); //获取当前页面的所有内容

				ob_end_flush();

				if ($name) {
					$this->saveCache($name,$content);
				}

				elseif($this->cachetime){
					$this->saveCache($this->cachename,$content);
				}
			}
		}
		/**
		 * [saveCache 保存缓存]
		 * @param  [type] $name    [description]
		 * @param  [type] $content [description]
		 * @return [type]          [description]
		 */
		public function saveCache($name,$content){
			if (!$name || !$content) return false;

			if ($this->makeDir(dirname($name))) {
				if ($fp=fopen($name,"w")) {
					if (@fwrite($fp,$content)) {
						fclose($fp);
						return true;
					}else{
						fclose($fp);
						return false;
					}
				}
			}

			return false;
		}
		/**
		 * [clearCache 清除缓存]
		 * @param  string $fileName [description]
		 * @return [type]           [description]
		 */
		public function clearCache($fileName = "all") {  
			if($fileName !="all"){
				$fileName = $this->cachedir.strtoupper(md5($fileName)).$this->cachefile;

				if (file_exists($fileName)) {
					return @unlink($fileName);
				}else{
					return false;
				}
			}

			if(is_dir($this->cachedir)){
				if ($dir = @opendir($this->cachedir)) {
					while ($file = @readdir($dir)) {
						$check = is_dir($file);
						if (!$check) {
							@unlink($this->cachedir.$file);
						}
					}

					@closedir($dir);
					return true;
				}else{
					return false;
				}
			}else{
				return false;
			}
		} 
		/**
		 * [makeDir 创建文件]
		 * @param  [type] $dirname [description]
		 * @return [type]          [description]
		 */
		public function makeDir($dir,$mode='0777'){
			if (!$dir){return 0;}

			$dir = str_replace("\\","/",$dir);
			$mdir = "";

			foreach (explode("/",$dir) as $val) {
				$mdir .=$val."/";
				if ($val == ".." || $val == "." || trim($val)== "")continue;

				if (!file_exists($mdir)) 
				{
					if (!@mkdir($mdir,$mode)) 
					{
						return false;
					}
				}	
			}
			return true;
		}

		/**
		 * [createCacheTime 创建缓存时间名]
		 * @param  [type] $cachename [description]
		 * @return [type]            [description]
		 */
		public function createCacheTime($cachename){
			if(!trim($cachename))return 0;
			if(file_exists($cachename)){
				return intval(filemtime($cachename));
			}else{
				return 0;
			}
		}
	   /**
		* [getFileName 生成一个缓存文件名]
		* @return [type] [description]
		*/
		public function getFileName(){
			return $this->cachedir.strtoupper(md5($_SERVER['REQUEST_URI'])).$this->cachefile;
		}

	}

index.php

<?php

	include $_SERVER['DOCUMENT_ROOT']."/slike/cache.php";

   	$cache=new Cache(30);
   	//$cache->clearCache();

	if(!$cache->cacheCheck('111.php')){
	   	echo file_get_contents($_SERVER['DOCUMENT_ROOT']."/slike/view/index.html");  
		echo date("Y-m-d H:i:s");
		$cache->putCache('111.php'); 
	}


 






© 著作权归作者所有

共有 人打赏支持
RablePHP
粉丝 15
博文 47
码字总数 11895
作品 0
巴南
程序员
让人疑惑的Java代码,竟成大多公司面试题热门

小编今天给大家看的这个笔试题 当年可是火遍大江南北 不妨你先看看到底会不会 这是关于一段令人疑惑的Java代码 下面我们来看一下Java代码 执行一下:会是什么呢 一个是true,一个是false,这...

OSC_Lucy
2017/07/11
4.6K
16
秋色园QBlog技术原理解析:性能优化篇:字节、缓存、并发(十二)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBl...

晨曦之光
2012/03/09
0
0
秋色园QBlog技术原理解析:性能优化篇:缓存总有失效时,持续的缓存方案(十四)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBl...

晨曦之光
2012/03/09
0
0
Web APi之控制器创建过程及原理解析(八)

前言 中秋歇了歇,途中也时不时去看看有关创建控制器的原理以及解析,时间拖得比较长,实在是有点心有余而力不足,但又想着既然诺下了要写完原理一系列,还需有始有终。废话少说,直入主题。...

jeffcky
2015/09/28
0
0
秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)

文章回顾: PS:秋色园QBlog下载地址:http://www.cyqdata.com/download/article-detail-427 上节回顾: 上节 秋色园QBlog技术原理解析:性能优化篇:缓存总有失效时,构造持续的缓存方案(十...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ubuntu 18.04 desktop 截图快捷键

如图,点击下方的 add shortcut 为这个快捷键命名 输入截图 command gnome-screenshot -a 设置快捷键 常用为 Ctrl - Alt + a 参考 http://os.51cto.com/art/200903/113091_all.htm...

公孙衍
31分钟前
0
0
一个六年Java程序员的从业总结:比起掉发,我更怕掉队

恍然间,发现自己在这个行业里已经摸爬滚打了五、六年了,原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了,但是今年在换工作的过程中却遭到了重大的挫...

老道士
34分钟前
16
2
Spacemacs快捷键

由于Spacemacs快捷键太多,为方便使用,将常用的快捷键记录在此。 以下快捷键都是在emacs的evil模式下 Buffers操作 创建名称为<buffer-name>的buffer SPC b b <buffer-name> 从已打开的buf...

yxmsw2007
38分钟前
1
0
GO冒泡,二分查找

package mainimport("fmt")func main() {var arr [5]int = [5]int{11,13,9,2,25}maopao(&arr)fmt.Println("arr = ", arr) //[2 9 11 13 25]findIndex := binaryFind(&arr, 0......

汤汤圆圆
今天
1
0
工作2年半跳槽面试阿里,成功拿到offer,凭什么?

2015年刚毕业的我,进入了一家小小的公司实习工作,在学校学了三年软件开发的我,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长。一直到18年三月份,我辞掉已有的工作,...

java知识分子
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部