파일시스템용, MySQL용 1.0.0 (2003.4.25)
  • 파일명 변경(class.hCache.php -> class.hCacheFile.php)
  • 클래스명 변경(hCache -> hCacheFile)
  • garbage collection 핸들러 gc()를 private 함수 _gc()로 변경 - 이전 버전에서는 보통 객체 생성한 후에 garbage collection 핸들러를 명시적으로 실행하여야 하였으나 이를 open 함수 내에서 동작하도록 수정하였습니다.
  • garbage collection period를 0으로 설정하면 garbage collection을 수행하지 않습니다.
  • 2명 이상의 방문자가 동시에 방문하였을 때 garbage collection 동작은 단 한명에게만 허용
  • 한 문서에서는 객체 생성을 몇 번을 하던지 관계없이 garbage collection을 디렉토리별로 한번만 수행
  • 하나의 객체에서 여러 개의 캐시 파일을 다룰 수 있도록 save_id() 함수를 추가
  • 캐시파일의 내용을 URL을 통해 불법적으로 접근하는 경우에 그 내용이 웹브라우저에 나타나지 않도록 개선
파일시스템용 0.0.2(2002.7.19)
  • PHP_OS 상수를 이용하여 서버가 윈도우 시스템인지 아닌지 자동 판별
[code php;gutter:false] $this->WIN32 = ("WIN32" == PHP_OS) ? true : false; [/code]
  • 캐시파일명으로 사용되는 $this->ID는 생성자에서 반드시 지정하여 주어야 합니다.
[code php;gutter:false] $cache = new hCache (array("id" => cache id)); [/code]
  • 파일시스템용 후키 캐시만 지원
  • 파일시스템용 후키 캐시 파일명 변경(class.hCacheHandler.php -> class.hCache.php), 클래스명은 hCache로 이전 버전과 동일함
파일시스템용 0.0.1p3(2002.4.25)
  • $HTTP_ENV_VARS["windir"] 문제 발생
윈도우 시스템 또는 PHP 버전에 따라 $GLOBALS["HTTP_ENV_VARS"]["windir"] 가 제대로 동작하지 않고 $GLOBALS["HTTP_ENV_VARS"]["WINDIR"] 로 지정해야 동작하는 경우도 있네요... 그래서 일단 iswin() 함수를 아래와 같이 재수정합니다.
[code php;gutter:false] function iswin() {
return ($GLOBALS["HTTP_SERVER_VARS"]["WINDIR"] ? true : false);
} [/code]
파일시스템용 0.0.1p2
  • 서버가 윈도우 시스템인지 아닌지 자동 판별하는 함수 추가
[code php;gutter:false] function iswin() {
if ($GLOBALS["HTTP_ENV_VARS"]["windir"]) {
return true;
} else {
return false;
}
} [/code]
위 함수에 의해 아래와 같이 생성자 내에서 멤버변수 WIN32를 자동 설정합니다.
[code php;gutter:false] function hCache($arg=NULL) {
.
.
.
$this->WIN32 = $this->iswin();
.
.
.
} [/code]
  • register_globals 값이 off일 때의 문제점 수정
[code php;gutter:false] function hCache($arg=NULL) {
$this->ID = get_class($this) . strtr($GLOBALS["HTTP_SERVER_VARS"]["PHP_SELF"],
$this->get_path_separator(), "_");
.
.
.
} [/code]
$GLOBALS["PHP_SELF"] 을 $GLOBALS["HTTP_SERVER_VARS"]["PHP_SELF"] 으로 수정합니다. $GLOBALS["PHP_SELF"]의 경우를 보면 PHP 버전에 따라 php.ini 파일 중 register_globals 값이 off일 때 제대로 동작하지 않습니다. 버전에 관계없이 정상적으로 동작시키기 위하여 $HTTP_SERVER_VARS를 통해 PHP_SELF 값을 얻습니다.
파일시스템용 0.0.1p1(2002.4.22)
  • 윈도우 시스템에서보면 라인끝을 CR/LF로 나타내느냐? LF로 나타내느냐에 따라 serialize()/unserialize() 함수가 제대로 동작하지 않습니다. 이를 해결하기 위해 메소드 read에서 파일 내용을 읽을 때 file 함수 대신에 fread 함수를 이용하였습니다.
[code php;gutter:false] function read() {
$cache_file = $this->PATH . $this->ID;
if (!file_exists($cache_file)) {
return false;
}
return @implode("", @file($cache_file));
} [/code]
[code php;gutter:false] function read() { // patch#1
$cache_file = $this->PATH . $this->ID;

if ($fp=@fopen($cache_file, "r")) {
$str = fread($fp, filesize($cache_file));
fclose($fp);
} else {
return false;
}

return $str;
} [/code]
 으로 수정합니다.
MySQL용 0.0.1-beta1(2002.1.29)
  • MySQL용으로 제공
파일시스템용 0.0.1-beta1(2002.1.29-최초 공개 버전)
  • open, gc, destroy, read, write, close 핸들러 제공
  • 생성자의 캐시 설정값으로는 update, id, period, maxlifetime, path를 지정할 수 있음

Posted by 방글24