X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fcache.php;h=98799bcf40ff904c70c7b08910b72005b221be63;hb=27b3943cc7a79ad16be45276f4676de22fc38617;hp=45938dddf86b736d22b45bf8dcd849e4efb0f821;hpb=3f0656fdbd9f6201f75e05445a864065783c24af;p=friendica.git diff --git a/include/cache.php b/include/cache.php index 45938dddf8..98799bcf40 100644 --- a/include/cache.php +++ b/include/cache.php @@ -84,9 +84,14 @@ class Cache { $memcache = self::memcache(); if (is_object($memcache)) { // We fetch with the hostname as key to avoid problems with other applications - $value = $memcache->get(get_app()->get_hostname().":".$key); - if (!is_bool($value)) { - return unserialize($value); + $cached = $memcache->get(get_app()->get_hostname().":".$key); + $value = @unserialize($cached); + + // Only return a value if the serialized value is valid. + // We also check if the db entry is a serialized + // boolean 'false' value (which we want to return). + if ($cached === serialize(false) || $value !== false) { + return $value; } return null; @@ -99,8 +104,16 @@ class Cache { dbesc($key) ); - if (count($r)) { - return $r[0]['v']; + if (dbm::is_result($r)) { + $cached = $r[0]['v']; + $value = @unserialize($cached); + + // Only return a value if the serialized value is valid. + // We also check if the db entry is a serialized + // boolean 'false' value (which we want to return). + if ($cached === serialize(false) || $value !== false) { + return $value; + } } return null; @@ -108,7 +121,9 @@ class Cache { /** * @brief Put data in the cache according to the key - * + * + * The input $value can have multiple formats. + * * @param string $key The key to the cached data * @param mixed $valie The value that is about to be stored * @param integer $duration The cache lifespan @@ -126,7 +141,7 @@ class Cache { /// @todo store the cache data in the same way like the config data q("REPLACE INTO `cache` (`k`,`v`,`expire_mode`,`updated`) VALUES ('%s','%s',%d,'%s')", dbesc($key), - dbesc($value), + dbesc(serialize($value)), intval($duration), dbesc(datetime_convert())); } @@ -171,7 +186,7 @@ class Cache { set_config("system", "cache_cleared_half_hour", time()); } - if (($max_level <= CACHE_QUARTER_HOUR) AND (get_config("system", "cache_cleared_hour")) < time() - self::duration(CACHE_QUARTER_HOUR)) { + if (($max_level <= CACHE_QUARTER_HOUR) AND (get_config("system", "cache_cleared_quarter_hour")) < time() - self::duration(CACHE_QUARTER_HOUR)) { q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d", dbesc(datetime_convert('UTC','UTC',"now - 15 minutes")), intval(CACHE_QUARTER_HOUR));