147 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * File: ConfigCache.php
 | |
|  *
 | |
|  * @package W3TC
 | |
|  */
 | |
| 
 | |
| namespace W3TC;
 | |
| 
 | |
| /**
 | |
|  * Provides access to config cache, used mostly when config is stored in
 | |
|  * database to not issue config loading database queries on each http request
 | |
|  */
 | |
| class ConfigCache {
 | |
| 	/**
 | |
| 	 * Reads config from config cache
 | |
| 	 *
 | |
| 	 * @param int  $blog_id Blog ID.
 | |
| 	 * @param bool $preview Preview flag.
 | |
| 	 *
 | |
| 	 * @return array|null
 | |
| 	 */
 | |
| 	public static function util_array_from_storage( $blog_id, $preview ) {
 | |
| 		$cache = self::get_cache();
 | |
| 
 | |
| 		$config = $cache->get( self::get_key( $blog_id, $preview ) );
 | |
| 		if ( is_array( $config ) ) {
 | |
| 			return $config;
 | |
| 		}
 | |
| 
 | |
| 		return null;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Removes config cache entry so that it can be read from original source
 | |
| 	 * on next attempt
 | |
| 	 *
 | |
| 	 * @param int  $blog_id Blog ID.
 | |
| 	 * @param bool $preview Preview flag.
 | |
| 	 */
 | |
| 	public static function remove_item( $blog_id, $preview ) {
 | |
| 		$cache = self::get_cache();
 | |
| 
 | |
| 		$cache->hard_delete( self::get_key( $blog_id, false ) );
 | |
| 		$cache->hard_delete( self::get_key( $blog_id, true ) );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Saves config cache entry.
 | |
| 	 *
 | |
| 	 * @param int   $blog_id Blog ID.
 | |
| 	 * @param bool  $preview Preview flag.
 | |
| 	 * @param mixed $data Data.
 | |
| 	 */
 | |
| 	public static function save_item( $blog_id, $preview, $data ) {
 | |
| 		$cache = self::get_cache();
 | |
| 
 | |
| 		$cache->set( self::get_key( $blog_id, $preview ), $data );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Retrieves cache instance.
 | |
| 	 *
 | |
| 	 * @return object
 | |
| 	 */
 | |
| 	private static function get_cache() {
 | |
| 		static $cache = null;
 | |
| 
 | |
| 		if ( ! is_null( $cache ) ) {
 | |
| 			return $cache;
 | |
| 		}
 | |
| 
 | |
| 		switch ( W3TC_CONFIG_CACHE_ENGINE ) {
 | |
| 			case 'memcached':
 | |
| 				$engine_config = array(
 | |
| 					'servers'           =>
 | |
| 						explode( ',', W3TC_CONFIG_CACHE_MEMCACHED_SERVERS ),
 | |
| 					'persistent'        =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_MEMCACHED_PERSISTENT' ) ?
 | |
| 							W3TC_CONFIG_CACHE_MEMCACHED_PERSISTENT : true ),
 | |
| 					'aws_autodiscovery' =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_MEMCACHED_AWS_AUTODISCOVERY' ) ?
 | |
| 							W3TC_CONFIG_CACHE_MEMCACHED_AWS_AUTODISCOVERY : false ),
 | |
| 					'username'          =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_MEMCACHED_USERNAME' ) ?
 | |
| 							W3TC_CONFIG_CACHE_MEMCACHED_USERNAME : '' ),
 | |
| 					'password'          =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_MEMCACHED_PASSWORD' ) ?
 | |
| 							W3TC_CONFIG_CACHE_MEMCACHED_PASSWORD : '' ),
 | |
| 					'key_version_mode'  => 'disabled',
 | |
| 				);
 | |
| 				break;
 | |
| 			case 'redis':
 | |
| 				$engine_config = array(
 | |
| 					'servers'                 =>
 | |
| 						explode( ',', W3TC_CONFIG_CACHE_REDIS_SERVERS ),
 | |
| 					'verify_tls_certificates' =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_REDIS_VERIFY_TLS_CERTIFICATES' ) ?
 | |
| 							W3TC_CONFIG_CACHE_REDIS_VERIFY_TLS_CERTIFICATES : true ),
 | |
| 					'persistent'              =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_REDIS_PERSISTENT' ) ?
 | |
| 							W3TC_CONFIG_CACHE_REDIS_PERSISTENT : true ),
 | |
| 					'dbid'                    =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_REDIS_DBID' ) ?
 | |
| 							W3TC_CONFIG_CACHE_REDIS_DBID : 0 ),
 | |
| 					'password'                =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_REDIS_PASSWORD' ) ?
 | |
| 							W3TC_CONFIG_CACHE_REDIS_PASSWORD : '' ),
 | |
| 					'timeout'                 =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_REDIS_TIMEOUT' ) ?
 | |
| 							W3TC_CONFIG_CACHE_REDIS_TIMEOUT : 0 ),
 | |
| 					'retry_interval'          =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_REDIS_RETRY_INTERVAL' ) ?
 | |
| 							W3TC_CONFIG_CACHE_REDIS_RETRY_INTERVAL : 0 ),
 | |
| 					'read_timeout'            =>
 | |
| 						( defined( 'W3TC_CONFIG_CACHE_REDIS_READ_TIMEOUT' ) ?
 | |
| 							W3TC_CONFIG_CACHE_REDIS_READ_TIMEOUT : 0 ),
 | |
| 					'key_version_mode'        => 'disabled',
 | |
| 				);
 | |
| 				break;
 | |
| 			default:
 | |
| 				$engine_config = array();
 | |
| 		}
 | |
| 
 | |
| 		$engine_config['blog_id']     = '0';
 | |
| 		$engine_config['module']      = 'config';
 | |
| 		$engine_config['host']        = '';
 | |
| 		$engine_config['instance_id'] = ( defined( 'W3TC_INSTANCE_ID' ) ? W3TC_INSTANCE_ID : 0 );
 | |
| 
 | |
| 		$cache = Cache::instance( W3TC_CONFIG_CACHE_ENGINE, $engine_config );
 | |
| 
 | |
| 		return $cache;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Retrieves config cache key.
 | |
| 	 *
 | |
| 	 * @param int  $blog_id Blog ID.
 | |
| 	 * @param bool $preview Preview flag.
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	private static function get_key( $blog_id, $preview ) {
 | |
| 		return 'w3tc_config_' . $blog_id . ( $preview ? '_preview' : '' );
 | |
| 	}
 | |
| }
 |