-
-
/* $cache = new Cache("../cache/",20); // コンストラクター、キャッシュ クラス オブジェクトを作成します - $cache->PutCache ( ); // キャッシュを注ぎ出す
- */
- class Cache
- {
- private $CacheDir = 'Cache'; /* キャッシュのディレクトリ*/
- private $SetTimeOut = 10; /* キャッシュの有効期限*/
- private $SetExt = ' .cache'; /* キャッシュ ファイルのサフィックス名*/
- private $CacheFileUrl = ''; /* キャッシュ ファイルのアドレス*/
- $CacheConfigFile = ''; /* キャッシュ ファイルの構成情報*/
public $LastUnixTimePoke = 0; /* 最後にキャッシュされた Unix タイムスタンプ */
- public $CurrentUnixTimePoke = 0;/* 現在キャッシュされた Unix タイムスタンプ */
- public $NextUnixTimePoke = 0; /* 次回キャッシュされた Unix タイムスタンプ */
- public $UnixNowToNext = 0; /* 現在のキャッシュと次のキャッシュの Unix タイムスタンプの差*/
public $LastTimePoke = 0; /* 最後にキャッシュされた時刻*/
- public $CurrentTimePoke = 0;/*現在のキャッシュ時間*/
- public $NextTimePoke = 0; /* 次回のキャッシュ時間*/
public $DataLength = 0; /* キャッシュ領域の内容の長さ*/
- $CacheToPage = '' ; /* キャッシュ ファイルの内容*/
- private $SplitTeam = false; /* キャッシュ ファイルをグループに保存するかどうか*/
public $Cache = false;ユーザーは外部で判断可能*/
private $_IsCache = false; /* キャッシュが可能かどうか*/
public function Cache($SetTimeOut = 20,$ CacheDir = 'キャッシュ',$SplitTeam = false,$SetExt = '.cache')
- {
- $this->CacheDir = $CacheDir;
- $this->SplitTeam = $SplitTeam;
- if(!is_numeric($ SetTimeOut))
- {
- $this->ErrResponse('キャッシュ有効期限の設定が無効です');
- return false;
- } else {
- $this->SetTimeOut = $SetTimeOut
- }
- $this-> ;SetExt = $SetExt;
/* キャッシュ開始*/
- ob_clean();
- ob_start();
- ob_implicit_flush(0);
- $this-> ;CreateCache();
- return true;
- }
プライベート関数 CreateCache()
- {
- $_CacheFile = str_replace('.','_',basename($_SERVER['PHP_SELF' ])) '_' .
- md5(basename($_SERVER['PHP_SELF'])) . $this->SetExt;
- $_CacheConfig = str_replace('.','_',basename($_SERVER['PHP_SELF'])) ' _' . '.cof';
if(!file_exists($this->CacheDir))
- {
- mkdir($this->CacheDir, 0777);
- }< /p>
if($this->SplitTeam)
- {
- $_CacheConfigDir = $this->CacheDir .str_replace('.','_',basename($ _SERVER['PHP_SELF']) ) . '_/';
- if(!file_exists($_CacheConfigDir))
- {
- mkdir($_CacheConfigDir,0777);
- }
- $_CacheUrl = $this->CacheDir . $_CacheFile;
- $_CacheConfigUrl = $this->CacheDir . $_CacheConfig;
- } else {
- $_CacheUrl = $this->$_CacheConfig;
- }
if(! _CacheUrl))
- {
- $hanld = @fopen($_CacheUrl,"w");
- @fclose($hanld);
- }
if(!file_exists($_CacheConfigUrl))
- {
- $hanld = @fopen($_CacheConfigUrl,"w");
- @fclose($hanld);
- } p>
$this->CacheConfigFile = $_CacheConfigUrl;
- $this- >CacheFileUrl = $_CacheUrl;
- $this->CheckCache();
- return true;
- }
プライベート関数 CheckCache()
- {
- $_FileEditTime = @filemtime($this->CacheFileUrl);
- $_TimeOut = $this->SetTimeOut;
- $_IsTimeOut = $_FileEditTime $ _TimeOut;
$this->LastUnixTimePoke = $_FileEditTime;
- $this->NextUnixTimePoke = $_IsTimeOut;
- $this->CurrentUnixTimePoke = time();
- $this-> ;UnixNowToNext = $this->NextUnixTimePoke - time();
$this->LastTimePoke = date("Y-m-d H:i:s",$_FileEditTime);
- $this- >次回のポケ = date("Y-m-d H:i:s",$_IsTimeOut);
- $this->CurrentTimePoke = date("Y-m-d H:i:s",time());
- < ;p>$_TxtInformation = "最後のキャッシュのタイムスタンプ: $this->LastUnixTimePoke ";
- $_TxtInformation .= "現在のキャッシュのタイムスタンプ: $this->CurrentUnixTimePoke ";
- $_TxtInformation .= "次のキャッシュ時刻 Poke: $this ->NextUnixTimePoke ";
$_TxtInformation .= "最終キャッシュ時刻: $this->LastTimePoke ";
- $_TxtInformation .= "現在のキャッシュ時刻: $this ->CurrentTimePoke " ;
- $_TxtInformation .= "次のキャッシュ時間: $this->NextTimePoke ";
$_TxtInformation .= "次のキャッシュ スタンプ: $this-> ;UnixNowToNext ";
$handl = @fopen($this->CacheConfigFile,'w');
- if($handl)
- {
- @fwrite($handl,$_TxtInformation) ;
- @fclose($handl) ;
- }
if($_IsTimeOut >= time())
- {
- $this->GetCacheData();
- }
- }< /p>
プライベート関数 ClearCacheFile()
- {
- @unlink($this->gt;CacheFileUrl);
- @unlink($this->gt;CacheConfigFile);
- }
{ - $this->DataLength = ob_get_length();
- $PutData = ob_get_contents();
- if(!file_exists($this->CacheFileUrl))
- {
- $CreateOK = $this ->CreateCache();
- if(!$CreateOK)
- {
- $this->ErrResponse('キャッシュ ファイルのチェック中にエラーが発生し、キャッシュ ファイルの作成に失敗しました');
- return false;
- }
- } else {
- $hanld = @fopen ($this->CacheFileUrl,"w");
- if($hanld)
- {
if(@is_writable($this->CacheFileUrl))
- {
- @flock( $hanld, LOCK_EX);
- $_PutData = @fwrite($hanld,$PutData);
- @flock($hanld, LOCK_UN);
- if(!$_PutData)
- {
- $this-> 変更できません現在のキャッシュ ファイルの内容');
- return false;
- } else {
- @fclose($hanld);
- return true;
- }
- } else {
- $this->ErrResponse('キャッシュされたファイルはwrite');
- return false;
- }
- } else {
$this->ErrResponse('キャッシュ ファイルを開くときに致命的なエラーが発生しました');
- return false;
- }
- }
- }
パブリック関数 GetCacheData()
- {
- $hanld = @fopen($this->CacheFileUrl,"r");
- if($hanld)
- {
- if (@is_readable ($this->CacheFileUrl))
- {
- $this->CacheToPage = @file_get_contents($this->CacheFileUrl);
- $IsEmpty = count(file($this->CacheFileUrl)); //キャッシュファイルが空か判定
if($IsEmpty> 0)
- {
- echo $this->CacheToPage;
- @fclose($hanld);
- ob_end_flush();
- exit( );
- }
- } else {
- $this->ErrResponse('キャッシュ ファイルの内容の読み取りに失敗しました');
- return false;
- }
- } else {
- $this->ErrResponse('キャッシュ ファイルの内容の読み取りに失敗しましたキャッシュ ファイルを開く' );
- return false;
- }
- }
プライベート関数 ErrResponse($Msg)
- {
- echo $Msg;
- }
- }
- ?>
-
コードをコピー
|