Configuration::getConfig('FileCache', 'path') ?: PATH_CACHE, 'enable_purge' => Configuration::getConfig('FileCache', 'enable_purge'), ]; if (!is_dir($fileCacheConfig['path'])) { throw new \Exception(sprintf('The FileCache path does not exists: %s', $fileCacheConfig['path'])); } if (!is_writable($fileCacheConfig['path'])) { throw new \Exception(sprintf('The FileCache path is not writable: %s', $fileCacheConfig['path'])); } return new FileCache($fileCacheConfig); case SQLiteCache::class: if (!extension_loaded('sqlite3')) { throw new \Exception('"sqlite3" extension not loaded. Please check "php.ini"'); } if (!is_writable(PATH_CACHE)) { throw new \Exception('The cache folder is not writable'); } $file = Configuration::getConfig('SQLiteCache', 'file'); if (!$file) { throw new \Exception(sprintf('Configuration for %s missing.', 'SQLiteCache')); } if (dirname($file) == '.') { $file = PATH_CACHE . $file; } elseif (!is_dir(dirname($file))) { throw new \Exception(sprintf('Invalid configuration for %s', 'SQLiteCache')); } return new SQLiteCache([ 'file' => $file, 'timeout' => Configuration::getConfig('SQLiteCache', 'timeout'), 'enable_purge' => Configuration::getConfig('SQLiteCache', 'enable_purge'), ]); case MemcachedCache::class: if (!extension_loaded('memcached')) { throw new \Exception('"memcached" extension not loaded. Please check "php.ini"'); } $section = 'MemcachedCache'; $host = Configuration::getConfig($section, 'host'); $port = Configuration::getConfig($section, 'port'); if (empty($host) && empty($port)) { throw new \Exception('Configuration for ' . $section . ' missing.'); } if (empty($host)) { throw new \Exception('"host" param is not set for ' . $section); } if (empty($port)) { throw new \Exception('"port" param is not set for ' . $section); } if (!ctype_digit($port)) { throw new \Exception('"port" param is invalid for ' . $section); } $port = intval($port); if ($port < 1 || $port > 65535) { throw new \Exception('"port" param is invalid for ' . $section); } return new MemcachedCache($host, $port); default: if (!file_exists(PATH_LIB_CACHES . $className . '.php')) { throw new \Exception('Unable to find the cache file'); } return new $className(); } } }