PHP文件緩存類實(shí)現(xiàn)代碼
php中緩存分類數(shù)據(jù)庫緩存,文件緩存和內(nèi)存緩存,下面我來給各位同學(xué)詳細(xì)介紹PHP文件緩存類實(shí)現(xiàn)代碼,有需要了解的朋友可參考。
頁面緩存類
代碼如下 :
<?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/"; //緩存更新時間秒數(shù),0為不緩存 var $cacheLimitTime = 3; //緩存文件名 var $cacheFileName = ""; //緩存擴(kuò)展名 var $cacheFileExt = "php"; /* * 構(gòu)造函數(shù) * int $cacheLimitTime 緩存更新時間 */ function cache( $cacheLimitTime ) { if( intval( $cacheLimitTime ) ) $this->cacheLimitTime = $cacheLimitTime; $this->cacheFileName = $this->getCacheFileName(); ob_start(); } /* * 檢查緩存文件是否在設(shè)置更新時間之內(nèi) * 返回:如果在更新時間之內(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 = "" ){ 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; } /* * 緩存文件建立時間 * string $fileName 緩存文件名(含相對路徑) * 返回:文件生成時間秒數(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; } } ?>
上面使用算是頁面緩存了,每次訪問頁面的時候,都會先檢測相應(yīng)的緩存頁面文件是否存在,如果不存在,就連接數(shù)據(jù)庫,得到數(shù)據(jù),顯示頁面并同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發(fā)揮作用了。(模板引擎和網(wǎng)上常見的一些緩存類通常有此功能)
給大家介紹一個Memcache緩存,算是內(nèi)存緩存。
代碼如下
<?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是高性能的,分布式的內(nèi)存對象緩存系統(tǒng),用于在動態(tài)應(yīng)用中減少數(shù)據(jù)庫負(fù)載,提升訪問速度。
以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)php緩存有所幫助。
相關(guān)文章
linux下使用ThinkPHP需要注意大小寫導(dǎo)致的問題
今天把剛完成的第一部分功能部署到客戶的測試服務(wù)器上,結(jié)果傻眼了,好多功能都用不了,列表頁刷出來全是空的。2011-08-08php讀取csv文件后,uft8 bom導(dǎo)致在頁面上顯示出現(xiàn)問題的解決方法
以下是對php讀取csv文件后,uft8 bom導(dǎo)致在頁面上顯示出現(xiàn)問題的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08在mac?OS上進(jìn)行多個PHP版本之間切換的實(shí)現(xiàn)方法
不同項(xiàng)目使用php版本可能不同,需要安裝不同版本php,本文給大家介紹了在macOS上進(jìn)行多個?PHP?版本之間切換的實(shí)現(xiàn)方法,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-10-10php自定義函數(shù)轉(zhuǎn)換html標(biāo)簽示例
這篇文章主要介紹了php自定義函數(shù)轉(zhuǎn)換html標(biāo)簽的方法,結(jié)合實(shí)例形式分析了php針對字符串的編碼轉(zhuǎn)換與正則替換操作技巧,需要的朋友可以參考下2016-09-09php實(shí)現(xiàn)快速排序法函數(shù)代碼
取一個值與其他值進(jìn)行比較,小的放在這個值的左邊,大的放在這個值的右邊,然后按照這個方式遞歸2012-08-08如何用RabbitMQ和Swoole實(shí)現(xiàn)一個異步任務(wù)系統(tǒng)
從最開始的使用redis實(shí)現(xiàn)的單進(jìn)程消費(fèi)的異步任務(wù)系統(tǒng)到加入swoole的多進(jìn)程消費(fèi)模式,現(xiàn)在,我們的異步任務(wù)系統(tǒng)終于又能邁進(jìn)一步。這回基于RabbitMQ的異步任務(wù)系統(tǒng)設(shè)計(jì)的的更加完善,包括多進(jìn)程消費(fèi),異常重試等。2021-05-05