* @author Bart Visscher * @author Morris Jobke * @author Robin Appelman * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see * */ namespace OC\Memcache; /** * See http://xcache.lighttpd.net/wiki/XcacheApi for provided constants and * functions etc. */ class XCache extends Cache { /** * entries in XCache gets namespaced to prevent collisions between ownCloud instances and users */ protected function getNameSpace() { return $this->prefix; } public function get($key) { return xcache_get($this->getNamespace().$key); } public function set($key, $value, $ttl=0) { if($ttl>0) { return xcache_set($this->getNamespace().$key, $value, $ttl); }else{ return xcache_set($this->getNamespace().$key, $value); } } public function hasKey($key) { return xcache_isset($this->getNamespace().$key); } public function remove($key) { return xcache_unset($this->getNamespace().$key); } public function clear($prefix='') { if (function_exists('xcache_unset_by_prefix')) { return xcache_unset_by_prefix($this->getNamespace().$prefix); } else { // Since we can not clear by prefix, we just clear the whole cache. xcache_clear_cache(\XC_TYPE_VAR, 0); } return true; } static public function isAvailable(){ if (!extension_loaded('xcache')) { return false; } if (\OC::$CLI) { return false; } if (!function_exists('xcache_unset_by_prefix') && ini_get('xcache.admin.enable_auth')) { // We do not want to use XCache if we can not clear it without // using the administration function xcache_clear_cache() // AND administration functions are password-protected. return false; } $var_size = (int) ini_get('xcache.var_size'); if (!$var_size) { return false; } return true; } }