// 램 캐시 vs 디스크 캐시
// xcache_set vs fwcache_set
// xcache_get vs fwcache_get
// xcache_isset vs fwcache_isset
// 시간제한 설정가능 vs 시간제한 설정불가
// Array 가능 vs Array 불가
// 램 캐시를 우선으로 사용, 그 다음 디스크 캐시 사용
// 자주 재부팅되는 서버에 적합하다.
// fwxcache_get
// fwxcache_set
// fwxcache_isset
// fw캐시와 x캐시를 합체한 것이다.
// 이 기능은 한 번 디스크에서 불러오면 램에 상주시켜 디스크 성능 저하를 줄이는 기능이다.
// 중복 충돌 방지를 위해 이 문자를 넣기 전 url encode 과정을 거친다.
$array_explode = "|";
function fwcache_isset($name){
$filename = $GLOBALS['fwcache_path'].urlencode($name).".txt";
$fwcache_isset = fopen($filename, 'r');
fclose($fwcache_isset);
return $fwcache_isset;
}
function fwxcache_isset($name){
// xcache가 우선, 그 다음이 fwcache
// 캐시가 존재하나 확인
if (xcache_isset($name)){
return xcache_isset($name);
} else {
if (fwcache_isset($name)){
return fwcache_isset($name);
} else {
return false;
}
}
}
function fwxcache_get($name){
if (xcache_isset($name)){
return xcache_get($name);
} else {
if (fwcache_isset($name)){
xcache_set($name,fwcache_get($name),0); // 디스크에서 불러와 램에 상주시켜 성능 저하 방지
return fwcache_get($name);
} else {
return false;
}
}
}
function fwxcache_set($name,$str){
xcache_set($name,$str,0);
fwcache_set($name,$str);
}
function fwcache_get($name){
$filename = $GLOBALS['fwcache_path'].urlencode($name).".txt";
$fwcache_isset = fopen($filename, 'r');
$fwcache_get = fread($fwcache_isset, filesize($filename));
fclose($fwcache_isset);
if (preg_match("/\|/",$fwcache_get)){
$array = explode($GLOBALS['array_explode'],$fwcache_get);
$out_array = array();
foreach($array as $key => $num){
array_push($out_array,urldecode($array[$key]));
}
return $out_array;
} else {
return urldecode($fwcache_get);
}
}
function fwcache_set($name,$str){
if (is_array($str)){
$out_array = array();
foreach($str as $key => $num){
array_push($out_array,urlencode($str[$key]));
}
$str = implode($GLOBALS['array_explode'],$out_array);
} else {
$str = urlencode($str);
}
$filename = $GLOBALS['fwcache_path'].urlencode($name).".txt";
$fwcache_set = fopen($filename, 'w+');
fwrite($fwcache_set, $str, strlen($str));
fclose($fwcache_set);
}