検索
ホームページphp教程php手册PHP文件缓存类实现代码,

PHP文件缓存类实现代码,

php中缓存分类数据库缓存,文件缓存内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考。
页面缓存类
代码如下 :

<&#63;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/";  
 //缓存更新时间秒数,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;  
 }  
}  
&#63;> 

上面使用算是页面缓存了,每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)
给大家介绍一个Memcache缓存,算是内存缓存。
代码如下

<&#63;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);
&#63;>

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

以上就是本文的全部内容,希望对大家学习php缓存有所帮助。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール