getPath())) { return true; } else { } return false; } /* * Init Cache Path */ function __construct($option = array()) { $this->setOption($option); $this->getPath(); if(!$this->checkdriver() && !isset($option['skipError'])) { throw new Exception("Can't use this driver for your website!"); } } /* * Return $FILE FULL PATH */ private function getFilePath($keyword, $skip = false) { $path = $this->getPath(); $code = md5($keyword); $folder = substr($code,0,2); $path = $path."/".$folder; /* * Skip Create Sub Folders; */ if($skip == false) { if(!file_exists($path)) { if(!@mkdir($path,0777)) { throw new Exception("PLEASE CHMOD ".$this->getPath()." - 0777 OR ANY WRITABLE PERMISSION!",92); } } elseif(!is_writeable($path)) { @chmod($path,0777); } } $file_path = $path."/".$code.".txt"; return $file_path; } function driver_set($keyword, $value = "", $time = 300, $option = array() ) { $file_path = $this->getFilePath($keyword); // echo "
DEBUG SET: ".$keyword." - ".$value." - ".$time."
"; $data = $this->encode($value); $toWrite = true; /* * Skip if Existing Caching in Options */ if(isset($option['skipExisting']) && $option['skipExisting'] == true && file_exists($file_path)) { $content = $this->readfile($file_path); $old = $this->decode($content); $toWrite = false; if($this->isExpired($old)) { $toWrite = true; } } if($toWrite == true) { $f = fopen($file_path,"w+"); fwrite($f,$data); fclose($f); } } function driver_get($keyword, $option = array()) { $file_path = $this->getFilePath($keyword); if(!file_exists($file_path)) { return null; } $content = $this->readfile($file_path); $object = $this->decode($content); if($this->isExpired($object)) { @unlink($file_path); $this->auto_clean_expired(); return null; } return $object; } function driver_delete($keyword, $option = array()) { $file_path = $this->getFilePath($keyword,true); if(@unlink($file_path)) { return true; } else { return false; } } /* * Return total cache size + auto removed expired files */ function driver_stats($option = array()) { $res = array( "info" => "", "size" => "", "data" => "", ); $path = $this->getPath(); $dir = @opendir($path); if(!$dir) { throw new Exception("Can't read PATH:".$path,94); } $total = 0; $removed = 0; while($file=readdir($dir)) { if($file!="." && $file!=".." && is_dir($path."/".$file)) { // read sub dir $subdir = @opendir($path."/".$file); if(!$subdir) { throw new Exception("Can't read path:".$path."/".$file,93); } while($f = readdir($subdir)) { if($f!="." && $f!="..") { $file_path = $path."/".$file."/".$f; $size = filesize($file_path); $object = $this->decode($this->readfile($file_path)); if($this->isExpired($object)) { unlink($file_path); $removed = $removed + $size; } $total = $total + $size; } } // end read subdir } // end if } // end while $res['size'] = $total - $removed; $res['info'] = array( "Total" => $total, "Removed" => $removed, "Current" => $res['size'], ); return $res; } function auto_clean_expired() { $autoclean = $this->get("keyword_clean_up_driver_files"); if($autoclean == null) { $this->set("keyword_clean_up_driver_files",3600*24); $res = $this->stats(); } } function driver_clean($option = array()) { $path = $this->getPath(); $dir = @opendir($path); if(!$dir) { throw new Exception("Can't read PATH:".$path,94); } while($file=readdir($dir)) { if($file!="." && $file!=".." && is_dir($path."/".$file)) { // read sub dir $subdir = @opendir($path."/".$file); if(!$subdir) { throw new Exception("Can't read path:".$path."/".$file,93); } while($f = readdir($subdir)) { if($f!="." && $f!="..") { $file_path = $path."/".$file."/".$f; unlink($file_path); } } // end read subdir } // end if } // end while } function driver_isExisting($keyword) { $file_path = $this->getFilePath($keyword,true); if(!file_exists($file_path)) { return false; } else { // check expired or not $value = $this->get($keyword); if($value == null) { return false; } else { return true; } } } function isExpired($object) { if(isset($object['expired_time']) && @date("U") >= $object['expired_time']) { return true; } else { return false; } } }