一个实用的PHP缓存类

简介: 代码     调用方法   代码     页面内容。。。。      
img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
<?   

 
/*   
 用户需要事先定义的常量:  

 _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 );  

  }  

  }  

 }  

    

 }   

 
?>  

 

调用方法

 

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
<? 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 );  

  }  

  
?>  

 

 

目录
相关文章
|
2月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
18天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
1月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
35 2
|
5月前
|
存储 缓存 自然语言处理
深入PHP内核:理解Opcode缓存与性能优化
【5月更文挑战第14天】 在动态语言的世界里,PHP一直因其高性能的执行效率和广泛的社区支持而备受青睐。随着Web应用的复杂性增加,对性能的要求也越来越高。本文将探讨PHP的Opcode缓存机制,解析其对性能提升的贡献,并展示如何通过配置和使用不同的Opcode缓存方案来进一步优化PHP应用的性能。我们将深入到PHP的核心,了解Opcode是如何生成的,以及它如何影响最终的执行效率。
|
1月前
|
PHP
PHP中的面向对象编程:理解类与对象
本文将深入探讨PHP中面向对象编程的核心概念——类与对象。通过实例讲解,帮助读者更好地理解如何在PHP中运用OOP编写更高效、可维护的代码。
30 9
|
19天前
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
34 0
|
2月前
|
PHP 开发者
PHP中的面向对象编程:掌握类与对象的精髓
探索PHP的面向对象编程世界,本文将带你了解如何通过创建和操作类来实例化对象。我们将深入讲解类的声明、构造函数的使用以及继承和多态性的概念。准备好,让我们一起在代码的海洋中航行,揭开PHP对象编程的神秘面纱!
|
2月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
2月前
|
存储 缓存 自然语言处理
|
3月前
|
设计模式 存储 缓存
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
34 0