/** * Loads the memcache extension */ public static function loadMemcache() { $memcache = Services::getConfiguration()->get('memcache'); if ($memcache === null or !extension_loaded('memcache')) { self::getConnection()->getProtocol()->sendLogLine("Cannot use memcache! No configuration found!"); } elseif (is_array($memcache['servers'])) { require_once SDIR . 'lib/system/cache/CacheSource.class.php'; self::$memcacheObj = new CacheSource(); // add server foreach ($memcache['servers'] as $server) { // create needed array $arguments = array(); // get server address if (!isset($server['address'])) { throw new Exception("Invalid memcache configuration: address tag is missing!"); } $arguments[] = $server['address']; // get port if (isset($server['port'])) { $arguments[] = $server['port']; } // get persistent option if (isset($server['persistent'])) { $arguments[] = (bool) intval($server['persistent']); } // add server call_user_func_array(array(self::$memcacheObj, 'addServer'), $arguments); // remove temp variables unset($arguments); } // flush old cache (we'll have old resources if the applications was killed) self::$memcacheObj->flush(); // test connection self::$memcacheObj->add('SERVICES_VERSION', SERVICES_VERSION); if (self::$memcacheObj->get('SERVICES_VERSION') !== false) { // add log entry self::getConnection()->getProtocol()->sendLogLine("Etablished connection to memcache server!"); } else { // add log entry self::getConnection()->getProtocol()->sendLogLine("An error occoured with memcache! I'll disable it ..."); // disable memcache self::$memcacheObj = null; } } }