/** * Load cache(s) * * @param array Array of caches to load: array( 'group_cache', 'forum_cache' ) * @return mixed Loaded Cache * @access private * @author MattMecham */ private static function _loadCaches($caches = array()) { if (!is_array($caches) or !count($caches)) { return NULL; } //----------------------------------------- // Finalize //----------------------------------------- $cachelist = "'" . implode("','", $caches) . "'"; //-------------------------------- // Eaccelerator... //-------------------------------- if (is_object(self::$cacheLib)) { $temp_cache = array(); $new_cache_array = array(); foreach ($caches as $key) { $temp_cache[$key] = self::$cacheLib->getFromCache($key); if (!$temp_cache[$key]) { $new_cache_array[] = $key; } else { if (is_string($temp_cache[$key]) and strstr($temp_cache[$key], "a:") !== false) { self::instance()->data_store[$key] = unserialize($temp_cache[$key]); } else { if ($temp_cache[$key] == "EMPTY") { self::instance()->data_store[$key] = NULL; } else { self::instance()->data_store[$key] = $temp_cache[$key]; } } } } $cachearray = $new_cache_array; unset($new_cache_array, $temp_cache); } //-------------------------------- // Get from DB... //-------------------------------- if ($cachelist) { /* This is here for veeeeeery old 1.0.1 upgrades */ if (!ipsRegistry::DB()->checkForTable('cache_store')) { ipsRegistry::DB()->query("create table " . ipsRegistry::dbFunctions()->getPrefix() . "cache_store (\r\n\t\t\t\t\t\t cs_key varchar(255) NOT NULL default '',\r\n\t\t\t\t\t\t cs_value text NULL,\r\n\t\t\t\t\t\t cs_extra varchar(255) NOT NULL default '',\r\n\t\t\t\t\t\t PRIMARY KEY(cs_key)\r\n\t\t\t\t\t\t);"); } ipsRegistry::DB()->build(array('select' => '*', 'from' => 'cache_store', 'where' => "cs_key IN ( {$cachelist} )")); ipsRegistry::DB()->execute(); $_seenKeys = array(); while ($r = ipsRegistry::DB()->fetch()) { $_seenKeys[$r['cs_key']] = $r['cs_key']; self::instance()->debugInfo[$r['cs_key']] = array('size' => IPSLib::strlenToBytes(strlen($r['cs_value']))); if ($r['cs_array'] or substr($r['cs_value'], 0, 2) == "a:") { self::instance()->data_store[$r['cs_key']] = unserialize($r['cs_value']); if (!is_array(self::instance()->data_store[$r['cs_key']])) { self::instance()->data_store[$r['cs_key']] = array(); } } else { self::instance()->data_store[$r['cs_key']] = $r['cs_value'] ? $r['cs_value'] : NULL; } if (is_object(self::$cacheLib)) { if (!$r['cs_value']) { $r['cs_value'] = "EMPTY"; } self::$cacheLib->putInCache($r['cs_key'], $r['cs_value']); } } } //----------------------------------------- // Make sure each key is in data_store otherwise // repeated calls will keep trying to load it //----------------------------------------- foreach ($caches as $_cache) { if (!in_array($_cache, $_seenKeys)) { self::instance()->data_store[$_cache] = NULL; } } }
/** * Load cache(s) * * @param array Array of caches to load: array( 'group_cache', 'forum_cache' ) * @return mixed Loaded Cache * @access private * @author MattMecham */ private static function _loadCaches($caches = array()) { if (!is_array($caches) or !count($caches)) { return NULL; } //----------------------------------------- // Finalize //----------------------------------------- $cachelist = "'" . implode("','", $caches) . "'"; //-------------------------------- // Eaccelerator... //-------------------------------- if (is_object(self::$cacheLib)) { $temp_cache = array(); $new_cache_array = array(); foreach ($caches as $key) { $temp_cache[$key] = self::$cacheLib->getFromCache($key); if (!$temp_cache[$key]) { $new_cache_array[] = $key; } else { if (strstr($temp_cache[$key], "a:")) { self::instance()->data_store[$key] = unserialize($temp_cache[$key]); } else { if ($temp_cache[$key] == "EMPTY") { self::instance()->data_store[$key] = NULL; } else { self::instance()->data_store[$key] = $temp_cache[$key]; } } } } $cachearray = $new_cache_array; unset($new_cache_array, $temp_cache); } //-------------------------------- // Get from DB... //-------------------------------- if ($cachelist) { ipsRegistry::DB()->build(array('select' => '*', 'from' => 'cache_store', 'where' => "cs_key IN ( {$cachelist} )")); ipsRegistry::DB()->execute(); $_seenKeys = array(); while ($r = ipsRegistry::DB()->fetch()) { $_seenKeys[$r['cs_key']] = $r['cs_key']; self::instance()->debugInfo[$r['cs_key']] = array('size' => IPSLib::strlenToBytes(strlen($r['cs_value']))); if ($r['cs_array'] or substr($r['cs_value'], 0, 2) == "a:") { self::instance()->data_store[$r['cs_key']] = unserialize($r['cs_value']); if (!is_array(self::instance()->data_store[$r['cs_key']])) { self::instance()->data_store[$r['cs_key']] = array(); } } else { self::instance()->data_store[$r['cs_key']] = $r['cs_value'] ? $r['cs_value'] : NULL; } if (is_object(self::$cacheLib)) { if (!$r['cs_value']) { $r['cs_value'] = "EMPTY"; } self::$cacheLib->putInCache($r['cs_key'], $r['cs_value']); } } } //----------------------------------------- // Make sure each key is in data_store otherwise // repeated calls will keep trying to load it //----------------------------------------- foreach ($caches as $_cache) { if (!in_array($_cache, $_seenKeys)) { self::instance()->data_store[$_cache] = NULL; } } }