45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:PHP文件缓存类实现代码的方法步骤

PHP文件缓存类实现代码的方法步骤

2016-03-04 22:08:51 来源:www.45fan.com 【

PHP文件缓存类实现代码的方法步骤

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缓存有所帮助。


本文地址:http://www.45fan.com/bcdm/41286.html
Tags: 文件 PHP 缓存
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部