PHP文件緩存類實現(xiàn)代碼
php中緩存分類數(shù)據(jù)庫緩存,文件緩存和內(nèi)存緩存,下面我來給各位同學(xué)詳細介紹PHP文件緩存類實現(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 = "";
//緩存擴展名
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ù)庫負載,提升訪問速度。
以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)php緩存有所幫助。
相關(guān)文章
linux下使用ThinkPHP需要注意大小寫導(dǎo)致的問題
今天把剛完成的第一部分功能部署到客戶的測試服務(wù)器上,結(jié)果傻眼了,好多功能都用不了,列表頁刷出來全是空的。2011-08-08
php讀取csv文件后,uft8 bom導(dǎo)致在頁面上顯示出現(xiàn)問題的解決方法
以下是對php讀取csv文件后,uft8 bom導(dǎo)致在頁面上顯示出現(xiàn)問題的解決方法進行了詳細的分析介紹,需要的朋友可以過來參考下2013-08-08
在mac?OS上進行多個PHP版本之間切換的實現(xiàn)方法
不同項目使用php版本可能不同,需要安裝不同版本php,本文給大家介紹了在macOS上進行多個?PHP?版本之間切換的實現(xiàn)方法,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下2023-10-10
php自定義函數(shù)轉(zhuǎn)換html標(biāo)簽示例
這篇文章主要介紹了php自定義函數(shù)轉(zhuǎn)換html標(biāo)簽的方法,結(jié)合實例形式分析了php針對字符串的編碼轉(zhuǎn)換與正則替換操作技巧,需要的朋友可以參考下2016-09-09
如何用RabbitMQ和Swoole實現(xiàn)一個異步任務(wù)系統(tǒng)
從最開始的使用redis實現(xiàn)的單進程消費的異步任務(wù)系統(tǒng)到加入swoole的多進程消費模式,現(xiàn)在,我們的異步任務(wù)系統(tǒng)終于又能邁進一步。這回基于RabbitMQ的異步任務(wù)系統(tǒng)設(shè)計的的更加完善,包括多進程消費,異常重試等。2021-05-05

