147 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			147 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php | ||
|  | if(!defined('DATALIFEENGINE')){die("Hacking attempt!");} | ||
|  | 
 | ||
|  | class cache{ | ||
|  |     var $dir = false; | ||
|  |     var $allow_cache = false; | ||
|  |     var $memcache = false; | ||
|  | 
 | ||
|  |     private $mcache; | ||
|  |     private $memcache_host = '127.0.0.1'; | ||
|  |     private $memcache_port = 11211; | ||
|  | 
 | ||
|  |     var $timelife = 3600; | ||
|  | 
 | ||
|  |     function __construct($dir) { | ||
|  |         global $config; | ||
|  | 
 | ||
|  |         $this->dir = $dir; | ||
|  |         if( $config['allow_cache'] = "yes" ) $this->allow_cache = true; | ||
|  | 		if( $config['cache_type']) $this->memcache = true; | ||
|  | 
 | ||
|  |         if( $this->memcache AND function_exists('memcache_connect') ) $this->mcache = memcache_connect($this->memcache_host, $this->memcache_port); | ||
|  |         if( $this->memcache AND function_exists('memcache_set_compress_threshold') ){memcache_set_compress_threshold( $this->mcache, 20000, 0.2 );} | ||
|  |    	} | ||
|  | 
 | ||
|  |     function off(){ | ||
|  |         $this->allow_cache = false; | ||
|  |     } | ||
|  | 
 | ||
|  |     function set($file, $data){ | ||
|  |         $fp = fopen( $this->dir.'/system/' . $file . '.php', 'wb+' ); | ||
|  |         if (!$data) $data = 'a:0:{}'; | ||
|  |         fwrite( $fp, serialize( $data ) ); | ||
|  |        	fclose( $fp ); | ||
|  |        	@chmod( $this->dir.'/system/' . $file . '.php', 0666 ); | ||
|  |     } | ||
|  | 
 | ||
|  |     function get($file){ | ||
|  |         return unserialize( @file_get_contents( $this->dir.'/system/' . $file . '.php' ) ); | ||
|  |     } | ||
|  | 
 | ||
|  |     function delete($cache_area = false){ | ||
|  |    		$fdir = opendir($this->dir.'/system/'); | ||
|  |    		while ($file = readdir($fdir)){ | ||
|  |    			if ($file != '.' and $file != '..' and $file != '.htaccess' and $file != 'online.php'){ | ||
|  |    				if ($cache_area){ | ||
|  |    					if (strpos($file, $cache_area) !== false) @unlink($this->dir.'/system/'.$file); | ||
|  |    				}else{ | ||
|  |    					@unlink($this->dir.'/system/'.$file); | ||
|  |    				} | ||
|  |    			} | ||
|  |    		} | ||
|  |    	} | ||
|  | 
 | ||
|  |     function filename($name){ | ||
|  |   		if(!$this->memcache) return $this->dir.'/'.$name.'.tmp'; | ||
|  |         else return md5($name); | ||
|  |   	} | ||
|  | 
 | ||
|  |     function open($name, $cache_id = false, $member_prefix = false){ | ||
|  |         global $is_logged, $member_id; | ||
|  |         if(!$this->allow_cache) return false; | ||
|  | 
 | ||
|  |        	if( $is_logged ) $group = $member_id['user_group']; else $group = "0"; | ||
|  | 
 | ||
|  |         if( !$cache_id ){ $filename = $this->filename($name); | ||
|  |         } else { | ||
|  |             $cache_id = md5( $cache_id ); | ||
|  |             if( $member_prefix ) $filename = $this->filename($name . "_" . $cache_id . "_" . $group); else $filename = $this->filename($name . "_" . $cache_id); | ||
|  |         } | ||
|  | 
 | ||
|  |         if($this->memcache){ | ||
|  |             return memcache_get($this->mcache, $filename); | ||
|  |         } else { | ||
|  |             if(file_exists($filename) && is_readable($filename)  && filesize($filename) > 0 && (time() - $this->timelife < filemtime($filename))) { | ||
|  |                 return @file_get_contents( $filename ); | ||
|  |       	    } else { | ||
|  |       		    return false; | ||
|  |       	    } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function save($name, $data, $cache_id = false, $member_prefix = false){ | ||
|  |         global $is_logged, $member_id; | ||
|  |         if(empty( $data ) OR !$this->allow_cache) return false; | ||
|  | 
 | ||
|  |         if( $is_logged ) $group = $member_id['user_group']; else $group = "0"; | ||
|  |         if( !$cache_id ){ $filename = $this->filename($name); | ||
|  |         } else { | ||
|  |             $cache_id = md5( $cache_id ); | ||
|  |             if( $member_prefix ) $filename = $this->filename($name . "_" . $cache_id . "_" . $group); else $filename = $this->filename($name . "_" . $cache_id); | ||
|  |         } | ||
|  | 
 | ||
|  |         if($this->memcache){ | ||
|  |             memcache_set( $this->mcache, $filename, $data, MEMCACHE_COMPRESSED, $this->timelife ); | ||
|  |         } else { | ||
|  |             @unlink( $filename ); | ||
|  |             file_put_contents ($filename, $data, LOCK_EX); | ||
|  |             @chmod( $filename, 0666 ); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function clear($cache_areas = false) { | ||
|  |         if ( $this->memcache ) { | ||
|  |        		memcache_flush($this->mcache); | ||
|  |        	} else { | ||
|  |         if ( $cache_areas ) {if(!is_array($cache_areas)) {$cache_areas = array($cache_areas);}} | ||
|  |       		$fdir = opendir( $this->dir ); | ||
|  |       		while ( $file = readdir( $fdir ) ) { | ||
|  |       			if( $file != '.' and $file != '..' and $file != '.htaccess' and $file != 'system' ) { | ||
|  |       				if( $cache_areas ) {	foreach($cache_areas as $cache_area) if( strpos( $file, $cache_area ) !== false ) @unlink( $this->dir . '/' . $file ); | ||
|  |       				} else {@unlink( $this->dir . '/' . $file );} | ||
|  |       	}}} | ||
|  |     } | ||
|  | 
 | ||
|  |     function del($file){ | ||
|  |         if ($this->memcache){ | ||
|  |             memcache_delete($this->mcache, $this->filename($file)); | ||
|  |         }else{ | ||
|  |             @unlink($this->filename($file)); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function size(){ | ||
|  |         if($this->memcache){ | ||
|  |             $stat = memcache_get_stats($this->mcache); | ||
|  |             $size = $stat['bytes']; | ||
|  |         }else{ | ||
|  |             $size = dirsize($this->dir); | ||
|  |         } | ||
|  |         return $size; | ||
|  |     } | ||
|  | 
 | ||
|  |     public function __destruct(){ | ||
|  |        if($this->memcache){ | ||
|  |           if(memcache_close($this->mcache)){ | ||
|  |              return TRUE; | ||
|  |           }else{ | ||
|  |              return FALSE; | ||
|  |           } | ||
|  |        }else{ | ||
|  |           return FALSE; | ||
|  |        } | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | ?>
 |