不错php文件缓存类,一个不错的PHP文件页面缓存类
[導讀]在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 = "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指定文件名(含函數)或者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緩存了,算是內存緩存了
代碼
代碼如下復制代碼
$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文件缓存类,一个不错的PHP文件页面缓存类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python批量生成,用python批量
- 下一篇: Matlab某医院用光电比色计,数理统计