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;
 | |
|        }
 | |
|     }
 | |
| 
 | |
| }
 | |
| ?>
 |