不错php文件缓存类,一个不错的PHP文件页面缓存类
[導(dǎo)讀]在php中緩存分類數(shù)據(jù)庫緩存,文件緩存和內(nèi)存緩存,下面我來給各位同學(xué)詳細(xì)介紹PHP文件緩存類實(shí)現(xiàn)代碼,有需要了解的朋友可參考。頁面緩存類 代碼如下復(fù)制代碼 在
緩存分類數(shù)據(jù)庫緩存,文件緩存和內(nèi)存緩存,下面我來給各位同學(xué)詳細(xì)介紹PHP文件緩存類實(shí)現(xiàn)代碼,有需要了解的朋友可參考。
頁面緩存類
代碼如下復(fù)制代碼
/*
*緩存類cache
*作者:多菜鳥
*實(shí)例:
*/
/*include( "cache.php" );
$cache = new cache(30);
$cache->cacheCheck();
echo date("Y-m-d H:i:s");
$cache->caching();? */
class cache {
//緩存目錄
var
$cacheRoot??????? =
"./cache/";
//緩存更新時(shí)間秒數(shù),0為不緩存
var
$cacheLimitTime?? = 3;
//緩存文件名
var
$cacheFileName??? = "";
//緩存擴(kuò)展名
var
$cacheFileExt???? = "php";
/*
*構(gòu)造函數(shù)
*
int $cacheLimitTime緩存更新時(shí)間
*/
function cache( $cacheLimitTime ) {
if( intval( $cacheLimitTime ) )
$this->cacheLimitTime = $cacheLimitTime;
$this->cacheFileName = $this->getCacheFileName();
ob_start();
}
/*
*檢查緩存文件是否在設(shè)置更新時(shí)間之內(nèi)
*返回:如果在更新時(shí)間之內(nèi)則返回文件內(nèi)容,反之則返回失敗
*/
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;
}
/*
*緩存文件或者輸出靜態(tài)
*
string $staticFileName靜態(tài)文件名(含相對路徑)
*/
function caching( $staticFileName = "http://www.sm136.com"
){
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指定文件名(含函數(shù))或者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;
}
}
/*
*根據(jù)當(dāng)前動態(tài)文件生成緩存文件名
*/
function getCacheFileName() {
return? $this->cacheRoot .
strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;
}
/*
*緩存文件建立時(shí)間
*
string $fileName緩存文件名(含相對路徑)
*返回:文件生成時(shí)間秒數(shù),文件不存在返回0
*/
function getFileCreateTime( $fileName ) {
if( ! trim($fileName) ) return 0;
if( file_exists( $fileName ) ) {
return intval(filemtime( $fileName ));
}else return 0;
}
/*
*保存文件
*
string $fileName文件名(含相對路徑)
*
string $text文件內(nèi)容
*返回:成功返回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;
}
/*
*連續(xù)建目錄
*
string $dir目錄字符串
*
int $mode權(quán)限數(shù)字
*返回:順利創(chuàng)建或者全部已建返回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;
}
}
?>
上面使用算是頁面緩存了,每次訪問頁面的時(shí)候,都會先檢測相應(yīng)的緩存頁面文件是否存在,如果不存在,就連接數(shù)據(jù)庫,得到數(shù)據(jù),顯示頁面并同時(shí)生成緩存頁面文件,這樣下次訪問的時(shí)候頁面文件就發(fā)揮作用了。(模板引擎和網(wǎng)上常見的一些緩存類通常有此功能)
后來給大家介紹一個(gè)Memcache緩存了,算是內(nèi)存緩存了
代碼
代碼如下復(fù)制代碼
$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是高性能的,分布式的內(nèi)存對象緩存系統(tǒng),用于在動態(tài)應(yīng)用中減少數(shù)據(jù)庫負(fù)載,提升訪問速度。
總結(jié)
以上是生活随笔為你收集整理的不错php文件缓存类,一个不错的PHP文件页面缓存类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python批量生成,用python批量
- 下一篇: php 中margin-top,css