Новая версия FILEMEMCACHE
07 мая 2009
Код подкатом...
/** * Получает путь до файла кеша по ID * * @param unknown_type $var * @return unknown */ function filememcache_getdir($var) { $dir = $_SERVER['DOCUMENT_ROOT'].'/filememcache/'; $varmd = substr(md5($var),0,3); $drs = implode('/',array($varmd{0},$varmd{1},$varmd{2})); $var_file = str_replace('//','/',$dir.'/'.$drs.'/'); //chmod($var_file.$var,0666); return $var_file.$var; } /** * Получаем значение из файл-мемкеша по ID * * @param unknown_type $var * @return unknown */ function filememcache_get($var) { $dir = $_SERVER['DOCUMENT_ROOT'].'/filememcache/'; $varmd = substr(md5($var),0,3); $drs = implode('/',array($varmd{0},$varmd{1},$varmd{2})); $var_file = str_replace('//','/',$dir.'/'.$drs.'/'); if (!is_dir($var_file)) mkdir($var_file,0777,true); if (is_file($var_file.$var)) { $fn = fopen($var_file.$var, 'r'); if (filesize($var_file.$var)>0) $data = fread($fn, filesize($var_file.$var)); fclose($fn); //chmod($var_file.$var,0666); $tmp = explode("<-cache->",$data); $time = $tmp[0]; $val = $tmp[1]; $type = isset($tmp[2]) ? $tmp[2] : 'string'; if ($type=='array') $val = unserialize($val); if ($time>time()) return $val; else return null; } else return null; } /** * Устанавливаем значение в файл-кеш по ID со временем жизни * * @param unknown_type $var * @param unknown_type $val * @param unknown_type $time */ function filememcache_set($var, $val, $time) { $dir = $_SERVER['DOCUMENT_ROOT'].'/filememcache/'; $varmd = substr(md5($var),0,3); $drs = implode('/',array($varmd{0},$varmd{1},$varmd{2})); $var_file = str_replace('//','/',$dir.'/'.$drs.'/'); if (!is_dir($var_file)) mkdir($var_file,0777,true); $type = gettype($val); if (is_array($val)) $val = serialize($val); $fn = fopen($var_file.$var,'w+'); fwrite($fn, (time() + $time)."<-cache->".$val."<-cache->".$type); fclose($fn); chmod($var_file.$var,0666); }
Пасибо)