-
-
/* $cache = new Cache("../cache/",20) // 생성자, 캐시 클래스 객체 생성 - $cache->PutCache(); // 캐시 붓기
- */
- class Cache
- {
- private $CacheDir = 'Cache' / * 캐시 디렉토리*/
- private $SetTimeOut = 10; /* 캐시 만료 시간*/
- private $SetExt = '.cache' /* 캐시 파일 접미사 이름*/
- private $CacheFileUrl = '' ; * 캐시 파일 주소 */
- private $CacheConfigFile = ''; /* 캐시 파일 구성 정보*/
public $LastUnixTimePoke = 0 /* 마지막 캐시 Unix 타임스탬프 * /
- public $CurrentUnixTimePoke = 0;/* 현재 캐시된 Unix 타임스탬프*/
- public $NextUnixTimePoke = 0; /* 다음 캐시된 Unix 타임스탬프*/
- public $ UnixNowToNext = 0; 지금과 다음 캐시*/
public $LastTimePoke = 0; /* 마지막 캐시 시간*/
- public $ CurrentTimePoke = 0;/* 현재 캐시된 시간 */
- public $NextTimePoke = 0; /* 다음 캐시 시간*/
public $DataLength = 0; /* 캐시 영역 콘텐츠 길이*/
- public $ CacheToPage = ''; /* 캐시 파일 내용*/
- private $SplitTeam = false /* 캐시 파일을 그룹으로 저장할지 여부*/
- < ;p>public $Cache = false; /* 캐싱이 필요한지 여부는 사용자가 외부에서 판단할 수 있습니다*/
private $_IsCache = false /* 캐싱이 가능한지 여부*/ p>공용 함수 Cache($SetTimeOut = 20,$CacheDir = 'Cache',$SplitTeam = false,$SetExt = '.cache')
- {
- $this->CacheDir = $CacheDir;
- $this->SplitTeam = $SplitTeam;
- if(!is_numeric($SetTimeOut))
- {
- $this->ErrResponse('캐시 만료 시간 설정이 잘못되었습니다.') ;
- false 반환;
- } else {
- $this->SetTimeOut = $SetTimeOut;
- }
- $this->SetExt = $SetExt;
- < p>/* 캐시 시작*/
- ob_clean();
- ob_start();
- ob_implicit_flush(0);
- $this->CreateCache();
- 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);
- }
if($this->SplitTeam)
- {
- $_CacheConfigDir = $this -> CacheDir . str_replace('.','_',basename($_SERVER['PHP_SELF'])) . '_/';
- if(!file_exists($_CacheConfigDir))
- {
- mkdir( $_CacheConfigDir,0777);
- }
- $_CacheUrl = $this->CacheDir . $_CacheFile;
- $_CacheConfigUrl = $_CacheConfigDir .
- } else {
- $_CacheUrl = $this->CacheDir . $_CacheFile;
- $_CacheConfigUrl = $this->CacheDir $_CacheConfig;
- }
- < p>if(!file_exists($_CacheUrl))
- {
- $hanld = @fopen($_CacheUrl,"w");
- @fclose($hanld);
- }< ;/p> ;
if(!file_exists($_CacheConfigUrl))
- {
- $hanld = @fopen($_CacheConfigUrl,"w");
- @fclose($hanld) ;
- }
$this->CacheConfigFile = $_CacheConfigUrl;
- $this->CacheFileUrl = $_CacheUrl;
- $this->CheckCache( );
- 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("연월일 H:i:s",$_FileEditTime);
- $this->NextTimePoke = 날짜("연월일 H:i:s",$_IsTimeOut);
- $this->CurrentTimePoke = date("Y-m-d H:i:s",time());
$_TxtInformation = "마지막 캐시 타임스탬프: $this->LastUnixTimePoke ";
- $_TxtInformation .= "현재 캐시 타임스탬프: $this->CurrentUnixTimePoke ";
- $_TxtInformation .= "다음 캐시 타임스탬프: $this->NextUnixTimePoke ";
- < p>$_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()
- }
- }
비공개 함수 ClearCacheFile()
- {
- @unlink($this->CacheFileUrl);
- @unlink($ this->CacheConfigFile);
- }
공용 함수 PutCache()
- {
- $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->ErrResponse('현재 캐시 파일의 내용을 변경할 수 없습니다.');
- return false;
- } else {
- @fclose($hanld );
- true를 반환;
- }
- } else {
- $this->ErrResponse('캐시 파일을 쓸 수 없습니다.');
- false를 반환;
- }
- } else {
$this->ErrResponse('캐시 파일을 열 때 치명적인 오류가 발생했습니다.');
- return false;
- }
- }
- }< ;/p>
공용 함수 GetCacheData()
- {
- $hanld = @fopen($this->CacheFileUrl,"r");
- if($hanld)
- {
- if(@is_reader($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;
- }
- }
- ? >
-
코드 복사
|