一个不错的PHP缓存类介绍和PHP缓存函数介绍以及使用

2024-06-21 10:58

本文主要是介绍一个不错的PHP缓存类介绍和PHP缓存函数介绍以及使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

缓存在实际使用当中应用很广泛,可以减轻对服务器数据库的访问,提高运行速度。目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率。下面是一个写得不错的缓存类,可以参考下缓存的机制与写法。

cache.php 代码如下:

<?  
/* 
用户需要事先定义的常量: 
_CachePath_        模板缓存路径 
_CacheEnable_        自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制 
_ReCacheTime_        自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存 
*/  class cache 
{var $cachefile;  var $cachefilevar;  function cache() {  //生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile  //动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有Cache文件都有相同的文件名,只是扩展名不同  $s=array(".","/");$r=array("_","");  $this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];  $this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);  }  //删除当前页/模块的缓存  function delete() {  //删除当前页的缓存  $d = dir(_CachePath_);  $strlen=strlen($this->cachefilevar);  //返回当前页的所有Cache文件组  while (false !== ($entry = $d->read())) {  if (substr($entry,0,$strlen)==$this->cachefilevar) {  if (!unlink(_CachePath_."/".$entry)) {echo "Cache目录无法写入";exit;}  }  }  }  //判断是否已Cache过,以及是否需要Cache  function check() {  //如果设置了缓存更新间隔时间 _ReCacheTime_  if (_ReCacheTime_+0>0){  //返回当前页Cache的最后更新时间  $var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];  //如果更新时间超出更新间隔时间则删除Cache文件  if (time()-$var>_ReCacheTime_) {  $this->delete();$ischage=true;  }  }  //返回当前页的Cache  $file=_CachePath_."/".$this->cachefile;  //判断当前页Cache是否存在 且 Cache功能是否开启  return (file_exists($file) and _CacheEnable_ and !$ischange);  }  //读取Cache  function read() {  //返回当前页的Cache  $file=_CachePath_."/".$this->cachefile;  //读取Cache文件的内容  if (_CacheEnable_) return readfile($file);  else return false;  }  //生成Cache  function write($output) {  //返回当前页的Cache  $file=_CachePath_."/".$this->cachefile;  //如果Cache功能开启  if (_CacheEnable_) {  //把输出的内容写入Cache文件  $fp=@fopen($file,'w');  if (!@fputs($fp,$output)) {echo "模板Cache写入失败";exit;}  @fclose($fp);  //如果设置了缓存更新间隔时间 _ReCacheTime_  if (_ReCacheTime_+0>0) {  //更新当前页Cache的最后更新时间  $file=_CachePath_."/".$this->cachefilevar;  $fp=@fopen($file,'w');  if (!@fwrite($fp,time())) {echo "Cache目录无法写入";exit;}  @fclose($fp);  }  }  }  
}  
?>


 

 

类的使用:

<?php  define("_CachePath_","./cache/");  define("_CacheEnable_","1");  define("_ReCacheTime_","43200");  include('cache.php');  $cache=new cache();  if ($cache->check()) {  $template=$cache->read();  }else {  ob_start();  ob_implicit_flush(0);  
?>  页面内容。。。。  
<?php  $template = ob_get_contents();  $cache->write($template);  }  
?>  


 

 

 

PHP的缓存相关函数介绍

 

有些信息比方经常不变的,但是还是能变的信息放在缓存中以加快显示速度,这是很有价值的,所谓的缓存,通俗的理解就是一些保存在服务器端的共用信息。它是于服务器同生死的,我们在保存缓存的时候可以指定下次更新的时间的判断,比方要在5分钟更新一次,可以记录上次更新的时间,和当前时间比较,如果大于 5 分钟 ,读取数据库,更新换成,否则直接读取缓存数据,当然,缓存需要客户端用户激活的,只需一次。

ob_start()函数

ob_start()函数:打开输出缓冲区。

函数格式 void ob_start(void)

说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

flush()函数

函数格式:flush()

说明:这个函数经常使用,效率很高。

string ob_get_contents()函数

ob_get_contents :返回内部缓冲区的内容。

函数格式:string ob_get_contents(void)

说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE。

ob_get_length()函数

ob_get_length:返回内部缓冲区的长度。

函数格式:int ob_get_length(void)

说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE。

ob_end_clean()函数

ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区。

函数格式:void ob_end_clean(void)

说明:这个函数不会输出内部缓冲区的内容而是把它删除。

ob_end_flush()函数

ob_end_flush:发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区

函数格式:void ob_end_flush(void)

说明:这个函数发送输出缓冲区的内容(如果有的话)。

ob_implicit_flush()函数

函数格式:void ob_implicit_flush ([int flag])

说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()。

PHP对静态页面的缓存技术研究

如果你的网站MySQL数据库的速度比较慢,你就需要看重网站的缓存了。用过 WordPress 的朋友都知道,它有一个插件叫 WP Super Cache, 可以将 WordPress 的页面在第一次生成时储存成静态页面,当再次请求这个页面时,就省去了读取数据库的时间。这里讨论的就是这种技术。

第一个问题就是怎样获取 PHP 输出的内容了。获取输出内容的原因很简单,因为我们可以把输出的内容储存起来,当访客再次光临的时候就把事先存好的内容给他。

实现这些目的其实也同样简单。我们只要把函数 ob_start() 在内容输出前调用,然后在所有内容输出完成后调用 ob_get_contents() 获取输出的内容,再在此后调用 ob_end_flush() 表示结束就可以了,一个简单的例子如下:

<?php ob_start(); ?><p>在 PHP 标签之外的输出可以被记录。</p>
<?php echo '<p>我被记录了。</p>' ?><?php $cache = ob_get_contents(); ?>
<?php/* 在这里添加任何处理 $cache 的代码 */echo $cache;
?><?php ob_end_flush(); ?>


程序运行结果:

在 PHP 标签之外的输出可以被记录。
我被记录了。在 PHP 标签之外的输出可以被记录。
我被记录了。

      可见,$cache变量保存了之前的输出结果。就是说,我们可以通过cache来减少PHP的结果输出。

有时我们有这样的习惯,对于管理员是不启用缓存的,而对游客则启用缓存。这个时候,其实实现起来也比较简单。我们可以自己编写两个函数 cache($id) 和 end_cache($id),分别表示缓存开始和缓存结束,然后代码如下(这里有三个函数省略了):

<?phpfunction is_admin() {/* 该函数用于测试当前用户是否是管理员,若是管理员则返回 true. */
}function show_cache($id) {/* 根据 $id 读取并显示缓存内容,若无缓存则返回 false. */
}function save_cache($id, $content) {/* 将标识符为 $id 的缓存,以内容 $content 储存。 */
}function cache($id) {if (is_admin())return false;if (show_cache($id))return false;ob_start();return true;
}function end_cache($id) {if (is_admin())return false;save_cache($id, ob_get_contents());ob_end_flush();return true;
}?>

有的时候,站点可能会根据需要,建立了专门为移动设备设计的页面。那么,这种情况下我们就应该将 $id 扩展一下。这种扩展有很多种方法,比如添加另一个参数,将移动设备的页面存在不同于桌面设备的文件夹中,而这些页面使用相同的 $id . 另外还有一种做法,就是将原来的 $id 与移动设备的 User-agent 糅合在一起,md5() 一下就可以了。我偏向于前面那种做法。当然肯定还有其它类似的做法,总之中心思想就是把缓存的标记 ($id) 设置成不一样的东西,并且当用户回来后还能区别得出它们,就可以了。

还有的时候,一个网站有多种用户角色,可能要给相应的用户相应的缓存。当然,只需遵循上面的原则。

ob_start() 和 ob_end_flush() 是递归处理的。也就是说,可以在调用 ob_end_flush() 之前,调用若干次 ob_start() . 例如:

有的时候,站点可能会根据需要,建立了专门为移动设备设计的页面。那么,这种情况下我们就应该将 $id 扩展一下。这种扩展有很多种方法,比如添加另一个参数,将移动设备的页面存在不同于桌面设备的文件夹中,而这些页面使用相同的 $id . 另外还有一种做法,就是将原来的 $id 与移动设备的 User-agent 糅合在一起,md5() 一下就可以了。我偏向于前面那种做法。当然肯定还有其它类似的做法,总之中心思想就是把缓存的标记 ($id) 设置成不一样的东西,并且当用户回来后还能区别得出它们,就可以了。

还有的时候,一个网站有多种用户角色,可能要给相应的用户相应的缓存。当然,只需遵循上面的原则。

ob_start() 和 ob_end_flush() 是递归处理的。也就是说,可以在调用 ob_end_flush() 之前,调用若干次 ob_start() . 例如:

<?php
ob_start();
echo 'content1'.'<br />';ob_start();
echo 'content2'.'<br />';$output1 = ob_get_contents(); 
echo $output1.'<br />';
ob_end_flush();
$output2 = ob_get_contents(); 
echo $output2.'<br />';
ob_end_flush();
?>

程序运行结果:

content1
content2
content2content1
content2
content2


 

这篇关于一个不错的PHP缓存类介绍和PHP缓存函数介绍以及使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081034

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]