diff --git a/lib/setup.php b/lib/setup.php index dfecd40dc49..fff6683b00d 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -44,6 +44,10 @@ global $CFG; * @global object(session) $SESSION */ global $SESSION; +/** + * Definition of shared memory cache + */ +global $MCACHE; /** * Definition of course type * @global object(course) $COURSE @@ -251,6 +255,12 @@ global $HTTPSPAGEREQUIRED; unset($originaldatabasedebug); error_reporting($CFG->debug); +/// Shared-Memory cache init -- will set $MCACHE +/// $MCACHE is a global object that offers at least add(), set() and delete() +/// with similar semantics to the memcached PHP API http://php.net/memcache + if (!empty($CFG->memcached) && !empty($CFG->memcachedhosts)) { + init_memcached(); + } /// Set a default enrolment configuration (see bug 1598) if (!isset($CFG->enrol)) { diff --git a/lib/setuplib.php b/lib/setuplib.php index ba4bfb9655e..d8e19a3bb13 100644 --- a/lib/setuplib.php +++ b/lib/setuplib.php @@ -209,4 +209,29 @@ function setup_is_unicodedb() { return $unicodedb; } +function init_memcached() { + global $CFG, $MCACHE; + + if (!function_exists('memcache_connect')) { + debugging("Memcached is set to true but the memcached extension is not installed"); + return false; + } + + $hosts = split(',', $CFG->memcachedhosts); + $MCACHE = new Memcache; + if (count($hosts) === 1) { + // the faster pconnect is only available + // for single-server setups + $MCACHE->pconnect($hosts[0]); + } else { + // multi-host setup will share key space + foreach ($hosts as $host) { + $host = trim($host); + $MCACHE->addServer($host); + } + } + + return true; +} + ?>