在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考。
页面缓存类
代码如下 |
复制代码 |
<?php /* *
缓存类 cache * 作
者:多菜鸟 * 实
例: */ /*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是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
大家在累了的时候,就去看看邪恶GIF动态图吧,内涵而不色情,愉悦身心!www.530312.net
一个不错的PHP文件页面缓存类,古老的榕树,5-wow.com