Your IP : 172.28.240.42


Current Path : /var/www/html/clients/rebirth.e-nk.ru/ips_kernel/
Upload File :
Current File : /var/www/html/clients/rebirth.e-nk.ru/ips_kernel/class_cache_diskcache.php

<?php
/*
+--------------------------------------------------------------------------
|   Invision Power Services Kernel [Cache Abstraction]
|	Invision Power Board
|   =============================================
|   by Matthew Mecham
|   (c) 2001 - 2006 Invision Power Services, Inc.
|   Nullified by Terabyte
|   =============================================
|   
+---------------------------------------------------------------------------
|   THIS IS NOT FREE / OPEN SOURCE SOFTWARE
+---------------------------------------------------------------------------
|
|   > Core Module
|   > Module written by Brandon Farber
|   > Date started: Friday 19th May 2006 17:33 
|
|	> Module Version Number: 1.0
+--------------------------------------------------------------------------
*/

/**
* IPS Kernel Pages: Cache Object Core
*	-- Hard-disk Cache Storage
*
* Basic Usage Examples
* <code>
* $cache = new cache_lib( 'identifier' );
* Update:
* $db->do_put( 'key', 'value' [, 'ttl'] );
* Remove
* $db->do_remove( 'key' );
* Retrieve
* $db->do_get( 'key' );
* </code>
*  		
* @package		IPS_KERNEL
* @subpackage	Cache Abstraction
* @author   	Brandon Mecham
* @version		1.0
*/

class cache_lib
{
	var $identifier;
	var $crashed		= 0;
	
	
	function cache_lib( $identifier='' )
	{
		if( !is_writeable( ROOT_PATH.'cache' ) )
		{
			$this->crashed = 1;
			return FALSE;
		}
		
		if( !$identifier )
		{
			$this->identifier = md5( uniqid( rand(), TRUE ) );
		}
		else
		{
			$this->identifier = $identifier;
		}
		
		unset( $identifier );
		
	}
	
	
	function disconnect()
	{
		return TRUE;
	}
		
	
	function do_put( $key, $value, $ttl=0 )
	{
		// We ignore TTL
		
		$fh = fopen( ROOT_PATH.'cache/'.md5( $this->identifier . $key ).'.php', 'wb' );
		
		if( !$fh )
		{
			return FALSE;
		}
		
		$extra_flag = "";
		
		if( is_array( $value ) )
		{
			$value = serialize($value);
			$extra_flag = "\n".'$is_array = 1;'."\n\n";
		}
		
		$extra_flag .= "\n".'$ttl = '.$ttl.";\n\n";
		
		$value = '"'.addslashes( $value ).'"';
		
		$file_content = "<?"."php\n\n".'$value = '.$value.";\n".$extra_flag."\n?".'>';
		
		flock( $fh, LOCK_EX );
		fwrite( $fh, $file_content );
		flock( $fh, LOCK_UN );
		fclose( $fh );
		
		@chmod( ROOT_PATH.'cache/'.md5( $this->identifier . $key ).'.php', 0777 );
	}
	
	function do_get( $key )
	{
		$return_val = "";
		
		if( file_exists( ROOT_PATH.'cache/'.md5( $this->identifier . $key ).'.php' ) )
		{
			require ROOT_PATH.'cache/'.md5( $this->identifier . $key ).'.php';
			
			$return_val = stripslashes($value);

			if( isset($is_array) AND $is_array == 1 )
			{
				$return_val = unserialize($return_val);
			}
			
			if( isset($ttl) AND $ttl > 0 )
			{
				if( $mtime = filemtime( ROOT_PATH.'cache/'.md5( $this->identifier . $key ).'.php' ) )
				{
					if( time() - $mtime > $ttl )
					{
						return FALSE;
					}
				}
			}
		}

		return $return_val;
	}
	
	function do_remove( $key )
	{
		if( file_exists( ROOT_PATH.'cache/'.md5( $this->identifier . $key ).'.php' ) )
		{
			@unlink( ROOT_PATH.'cache/'.md5( $this->identifier . $key ).'.php' );
		}
	}
}
?>