You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							174 lines
						
					
					
						
							6.6 KiB
						
					
					
				
			
		
		
	
	
							174 lines
						
					
					
						
							6.6 KiB
						
					
					
				| <?php
 | |
| /**
 | |
|  *
 | |
|  * This file is part of phpFastCache.
 | |
|  *
 | |
|  * @license MIT License (MIT)
 | |
|  *
 | |
|  * For full copyright and license information, please see the docs/CREDITS.txt file.
 | |
|  *
 | |
|  * @author Khoa Bui (khoaofgod)  <khoaofgod@gmail.com> http://www.phpfastcache.com
 | |
|  * @author Georges.L (Geolim4)  <contact@geolim4.com>
 | |
|  *
 | |
|  */
 | |
| 
 | |
| namespace phpFastCache;
 | |
| 
 | |
| use phpFastCache\Core\phpFastCache;
 | |
| use phpFastCache\Core\DriverAbstract;
 | |
| 
 | |
| /**
 | |
|  * Class CacheManager
 | |
|  * @package phpFastCache
 | |
|  *
 | |
|  * @method static DriverAbstract Apc() Apc($config = array()) Return a driver "apc" instance
 | |
|  * @method static DriverAbstract Cookie() Cookie($config = array()) Return a driver "cookie" instance
 | |
|  * @method static DriverAbstract Files() Files($config = array()) Return a driver "files" instance
 | |
|  * @method static DriverAbstract Memcache() Memcache($config = array()) Return a driver "memcache" instance
 | |
|  * @method static DriverAbstract Memcached() Memcached($config = array()) Return a driver "memcached" instance
 | |
|  * @method static DriverAbstract Predis() Predis($config = array()) Return a driver "predis" instance
 | |
|  * @method static DriverAbstract Redis() Redis($config = array()) Return a driver "redis" instance
 | |
|  * @method static DriverAbstract Sqlite() Sqlite($config = array()) Return a driver "sqlite" instance
 | |
|  * @method static DriverAbstract Ssdb() Ssdb($config = array()) Return a driver "ssdb" instance
 | |
|  * @method static DriverAbstract Wincache() Wincache($config = array()) Return a driver "wincache" instance
 | |
|  * @method static DriverAbstract Xcache() Xcache($config = array()) Return a driver "xcache" instance
 | |
|  *
 | |
|  */
 | |
| class CacheManager
 | |
| {
 | |
|     public static $instances = array();
 | |
|     public static $memory = array();
 | |
|     public static $hit = array();
 | |
| 
 | |
|     /**
 | |
|      * @param string $storage
 | |
|      * @param array $config
 | |
|      * @return DriverAbstract
 | |
|      */
 | |
|     public static function getInstance($storage = 'auto', $config = array())
 | |
|     {
 | |
|         $storage = strtolower($storage);
 | |
|         if (empty($config)) {
 | |
|             $config = phpFastCache::$config;
 | |
|         }
 | |
|         if (!isset($config[ 'cache_method' ])) {
 | |
|             $config[ 'cache_method' ] = phpFastCache::$config[ 'cache_method' ];
 | |
|         }
 | |
|         if (!isset($config[ 'limited_memory_each_object' ])) {
 | |
|             $config[ 'limited_memory_each_object' ] = phpFastCache::$config[ 'limited_memory_each_object' ];
 | |
|         }
 | |
|         if (isset(phpFastCache::$config[ 'overwrite' ]) && !in_array(phpFastCache::$config[ 'overwrite' ], array('auto', ''), true)) {
 | |
|             phpFastCache::$config[ 'storage' ] = phpFastCache::$config[ 'overwrite' ];
 | |
|             $storage = phpFastCache::$config[ 'overwrite' ];
 | |
|         } else if (isset(phpFastCache::$config[ 'storage' ]) && !in_array(phpFastCache::$config[ 'storage' ], array('auto', ''), true)) {
 | |
|             $storage = phpFastCache::$config[ 'storage' ];
 | |
|         } else if (in_array($storage, array('auto', ''), true)) {
 | |
|             $storage = phpFastCache::getAutoClass($config);
 | |
|         }
 | |
| 
 | |
|         //  echo $storage."<br>";
 | |
|         $instance = md5(serialize($config) . $storage);
 | |
|         if (!isset(self::$instances[ $instance ]) || is_null(self::$instances[ $instance ])) {
 | |
|             $class = '\phpFastCache\Drivers\\' . $storage;
 | |
|             $config[ 'storage' ] = $storage;
 | |
|             $config[ 'instance' ] = $instance;
 | |
|             $config[ 'class' ] = $class;
 | |
|             if (!isset(self::$memory[ $instance ])) {
 | |
|                 self::$memory[ $instance ] = array();
 | |
|             }
 | |
| 
 | |
|             if (!isset(self::$hit[ $instance ])) {
 | |
|                 self::$hit[ $instance ] = array(
 | |
|                   "class" => $class,
 | |
|                   "storage" => $storage,
 | |
|                   "data" => array(),
 | |
|                 );
 | |
|                 if ($config[ 'cache_method' ] == 4) {
 | |
|                     register_shutdown_function('phpFastCache\CacheManager::cleanCachingMethod', null);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             self::$instances[ $instance ] = new $class($config);
 | |
|         }
 | |
| 
 | |
|         return self::$instances[ $instance ];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Setup Method
 | |
|      * @param string $string | traditional(normal), memory (fast), phpfastcache (fastest)
 | |
|      */
 | |
|     public static function CachingMethod($string = "phpFastCache")
 | |
|     {
 | |
|         $string = strtolower($string);
 | |
|         if (in_array($string, array("normal", "traditional"))) {
 | |
|             phpFastCache::$config[ 'cache_method' ] = 1;
 | |
|         } else if (in_array($string, array("fast", "memory"))) {
 | |
|             phpFastCache::$config[ 'cache_method' ] = 2;
 | |
|         } else if (in_array($string, array("fastest", "phpfastcache"))) {
 | |
|             phpFastCache::$config[ 'cache_method' ] = 3;
 | |
|         } else if (in_array($string, array("superfast", "phpfastcachex"))) {
 | |
|             phpFastCache::$config[ 'cache_method' ] = 4;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * CacheManager::Files();
 | |
|      * CacheManager::Memcached();
 | |
|      * CacheManager::get($keyword);
 | |
|      * CacheManager::set(), touch, other @method supported
 | |
|      */
 | |
|     public static function __callStatic($name, $arguments)
 | |
|     {
 | |
|         $driver = strtolower($name);
 | |
|         if (!isset(self::$instances[ 'loaded' ][ $driver ]) && class_exists("\\phpFastCache\\Drivers\\{$driver}")) {
 | |
|             self::$instances[ 'loaded' ][ $driver ] = true;
 | |
|         }
 | |
|         if (isset(self::$instances[ 'loaded' ][ $driver ])) {
 | |
|             return self::getInstance($name, (isset($arguments[ 0 ]) ? $arguments[ 0 ] : array()));
 | |
|         } else {
 | |
|             return call_user_func_array(array(self::getInstance(), $name), $arguments);
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Shortcut to phpFastCache::setup()
 | |
|      */
 | |
|     public static function setup($name, $value = '')
 | |
|     {
 | |
|         phpFastCache::setup($name, $value);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $instance
 | |
|      */
 | |
|     public static function cleanCachingMethod($instance = null)
 | |
|     {
 | |
|         if (is_null($instance)) {
 | |
|             foreach (self::$instances as $instance => $data) {
 | |
|                 self::__CleanCachingMethod($instance);
 | |
|                 unset($data);
 | |
|             }
 | |
|         } else {
 | |
|             self::__CleanCachingMethod($instance);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $instance
 | |
|      */
 | |
|     protected static function __CleanCachingMethod($instance)
 | |
|     {
 | |
|         if(is_array(self::$memory[ $instance ]) && !empty(self::$memory[ $instance ])) {
 | |
|             $old = self::$instances[$instance]->config['cache_method'];
 | |
|             self::$instances[$instance]->config['cache_method'] = 1;
 | |
|             foreach (self::$memory[$instance] as $keyword => $object) {
 | |
|                 self::$instances[$instance]->set($keyword, $object['value'], $object['expired_in']);
 | |
|             }
 | |
|             self::$instances[$instance]->config['cache_method'] = $old;
 | |
|             self::$memory[$instance] = array();
 | |
|         }
 | |
|     }
 | |
| }
 |