summaryrefslogtreecommitdiff
path: root/program
diff options
context:
space:
mode:
Diffstat (limited to 'program')
-rw-r--r--program/include/rcmail.php39
-rw-r--r--program/include/rcube_session.php12
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
@@ -64,6 +64,13 @@ class rcmail
public $db;
/**
+ * Instace of Memcache class.
+ *
+ * @var rcube_mdb2
+ */
+ public $memcache;
+
+ /**
* Instace of rcube_session class.
*
* @var rcube_session
@@ -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'),