PHP文件缓存类实现代码


Posted in PHP onOctober 26, 2015

php中缓存分类数据库缓存,文件缓存内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考。
页面缓存类
代码如下 :

<?php  
/*include( "cache.php" );  
  
$cache = new cache(30);  
$cache->cacheCheck();  
  
echo date("Y-m-d H:i:s");  
  
$cache->caching(); */
class cache {  
 //缓存目录  
 var $cacheRoot    = "./cache/";  
 //缓存更新时间秒数,0为不缓存  
 var $cacheLimitTime  = 3; 
 //缓存文件名  
 var $cacheFileName  = "";  
 //缓存扩展名  
 var $cacheFileExt   = "php";  
   
 /*  
  * 构造函数  
  * int $cacheLimitTime 缓存更新时间  
  */  
 function cache( $cacheLimitTime ) {  
  if( intval( $cacheLimitTime ) )   
   $this->cacheLimitTime = $cacheLimitTime;  
  $this->cacheFileName = $this->getCacheFileName();  
  ob_start();  
 }  
   
 /*  
  * 检查缓存文件是否在设置更新时间之内  
  * 返回:如果在更新时间之内则返回文件内容,反之则返回失败  
  */  
 function cacheCheck(){  
  if( file_exists( $this->cacheFileName ) ) {  
   $cTime = $this->getFileCreateTime( $this->cacheFileName );  
   if( $cTime + $this->cacheLimitTime > time() ) {  
    echo file_get_contents( $this->cacheFileName );  
    ob_end_flush();  
    exit;  
   }  
  }  
  return false;  
 }  
   
 /*  
  * 缓存文件或者输出静态  
  * string $staticFileName 静态文件名(含相对路径)  
  */  
 function caching( $staticFileName = "" ){  
  if( $this->cacheFileName ) {  
   $cacheContent = ob_get_contents();  
   //echo $cacheContent;  
   ob_end_flush();  
   
   if( $staticFileName ) {  
     $this->saveFile( $staticFileName, $cacheContent );  
   }  
   
   if( $this->cacheLimitTime )  
    $this->saveFile( $this->cacheFileName, $cacheContent );  
  }  
 }  
   
 /*  
  * 清除缓存文件  
  * string $fileName 指定文件名(含函数)或者all(全部)  
  * 返回:清除成功返回true,反之返回false  
  */  
 function clearCache( $fileName = "all" ) {  
  if( $fileName != "all" ) {  
   $fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt;  
   if( file_exists( $fileName ) ) {  
    return @unlink( $fileName );  
   }else return false;  
  }  
  if ( is_dir( $this->cacheRoot ) ) {  
   if ( $dir = @opendir( $this->cacheRoot ) ) {  
    while ( $file = @readdir( $dir ) ) {  
     $check = is_dir( $file );  
     if ( !$check )  
     @unlink( $this->cacheRoot . $file );  
    }  
    @closedir( $dir );  
    return true;  
   }else{  
    return false;  
   }  
  }else{  
   return false;  
  }  
 }  
   
 /*  
  * 根据当前动态文件生成缓存文件名  
  */  
 function getCacheFileName() {  
  return $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;  
 }  
   
 /*  
  * 缓存文件建立时间  
  * string $fileName  缓存文件名(含相对路径)  
  * 返回:文件生成时间秒数,文件不存在返回0  
  */  
 function getFileCreateTime( $fileName ) {  
  if( ! trim($fileName) ) return 0;  
   
  if( file_exists( $fileName ) ) {   
   return intval(filemtime( $fileName ));  
  }else return 0;  
 }  
   
 /*  
  * 保存文件  
  * string $fileName 文件名(含相对路径)  
  * string $text   文件内容  
  * 返回:成功返回ture,失败返回false  
  */  
 function saveFile($fileName, $text) {  
  if( ! $fileName || ! $text ) return false;  
   
  if( $this->makeDir( dirname( $fileName ) ) ) {  
   if( $fp = fopen( $fileName, "w" ) ) {  
    if( @fwrite( $fp, $text ) ) {  
     fclose($fp);  
     return true;  
    }else {  
     fclose($fp);  
     return false;  
    }  
   }  
  }  
  return false;  
 }  
   
 /*  
  * 连续建目录  
  * string $dir 目录字符串  
  * int $mode  权限数字  
  * 返回:顺利创建或者全部已建返回true,其它方式返回false  
  */  
 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;  
 }  
}  
?>

上面使用算是页面缓存了,每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)
给大家介绍一个Memcache缓存,算是内存缓存。
代码如下

<?php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)n";
$get_result = $memcache->get('key');
echo "Data from the cache:n";
var_dump($get_result);
?>

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

以上就是本文的全部内容,希望对大家学习php缓存有所帮助。

PHP 相关文章推荐
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
PHP捕获Fatal error错误的方法
Jun 11 PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 PHP
Yii核心组件AssetManager原理分析
Dec 02 PHP
四个常见html网页乱码问题及解决办法
Sep 08 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
Nov 10 PHP
php5与php7的区别点总结
Oct 11 PHP
laravel框架使用极光推送消息操作示例
Feb 15 PHP
php多线程实现方法及用法实例详解
Oct 26 #PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 #PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 #PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 #PHP
php 参数过滤、数据过滤详解
Oct 26 #PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 #PHP
php实现CSV文件导入和导出
Oct 24 #PHP
You might like
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
php简单分页类实现方法
2015/02/26 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
django中的图片验证码功能
2019/09/18 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
Linux机考试题
2015/07/17 面试题
《问银河》教学反思
2014/02/19 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
关键在于落实心得体会
2014/09/03 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
小学生成绩单评语
2014/12/31 职场文书
2015年复活节活动总结
2015/02/27 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
实用求职信模板范文
2019/05/13 职场文书