From 76d4019a355019f2cc3465bd36e3475f80c3d745 Mon Sep 17 00:00:00 2001 From: thomascube Date: Wed, 18 May 2011 10:16:36 +0000 Subject: Get memcache object from rcmail instance --- program/include/rcmail.php | 39 +++++++++++++++++++++++++++++++++++++++ program/include/rcube_session.php | 12 ++---------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 5567130e3..eb08c81dc 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -63,6 +63,13 @@ class rcmail */ public $db; + /** + * Instace of Memcache class. + * + * @var rcube_mdb2 + */ + public $memcache; + /** * Instace of rcube_session class. * @@ -310,6 +317,38 @@ class rcmail return $this->db; } + + + /** + * Get global handle for memcache access + * + * @return object Memcache + */ + public function get_memcache() + { + if (!isset($this->memcache)) { + // no memcache support in PHP + if (!class_exists('Memcache')) { + $this->memcache = false; + return false; + } + + $this->memcache = new Memcache; + $mc_available = 0; + foreach ($this->config->get('memcache_hosts', array()) as $host) { + list($host, $port) = explode(':', $host); + if (!$port) $port = 11211; + // add server and attempt to connect if not already done yet + if ($this->memcache->addServer($host, $port) && !$mc_available) + $mc_available += intval($this->memcache->connect($host, $port)); + } + + if (!$mc_available) + $this->memcache = false; + } + + return $this->memcache; + } /** diff --git a/program/include/rcube_session.php b/program/include/rcube_session.php index e4d9a87aa..a63501079 100644 --- a/program/include/rcube_session.php +++ b/program/include/rcube_session.php @@ -59,18 +59,10 @@ class rcube_session // use memcache backend if ($config->get('session_storage', 'db') == 'memcache') { - $this->memcache = new Memcache; - $mc_available = 0; - foreach ($config->get('memcache_hosts', array()) as $host) { - list($host, $port) = explode(':', $host); - if (!$port) $port = 11211; - // add server and attempt to connect if not already done yet - if ($this->memcache->addServer($host, $port) && !$mc_available) - $mc_available += intval($this->memcache->connect($host, $port)); - } + $this->memcache = rcmail::get_instance()->get_memcache(); // set custom functions for PHP session management if memcache is available - if ($mc_available) { + if ($this->memcache) { session_set_save_handler( array($this, 'open'), array($this, 'close'), -- cgit v1.2.3