X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fcache.php;h=d3b24c19e771e8085ec19e80cf19399fae769a48;hb=0cd9db9cb7f4c96f597e37590a536eaae123238d;hp=45938dddf86b736d22b45bf8dcd849e4efb0f821;hpb=a65479ccfd8cc3f949b16eb81e99c9af328d08d2;p=friendica.git diff --git a/include/cache.php b/include/cache.php index 45938dddf8..d3b24c19e7 100644 --- a/include/cache.php +++ b/include/cache.php @@ -5,8 +5,8 @@ * @brief Class for storing data for a short time */ -use \Friendica\Core\Config; -use \Friendica\Core\PConfig; +use Friendica\Core\Config; +use Friendica\Core\PConfig; class Cache { /** @@ -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; @@ -109,6 +122,8 @@ 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())); } @@ -157,35 +172,35 @@ class Cache { set_config("system", "cache_cleared_day", time()); } - if (($max_level <= CACHE_HOUR) AND (get_config("system", "cache_cleared_hour")) < time() - self::duration(CACHE_HOUR)) { + if (($max_level <= CACHE_HOUR) && (get_config("system", "cache_cleared_hour")) < time() - self::duration(CACHE_HOUR)) { q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d", dbesc(datetime_convert('UTC','UTC',"now - 1 hours")), intval(CACHE_HOUR)); set_config("system", "cache_cleared_hour", time()); } - if (($max_level <= CACHE_HALF_HOUR) AND (get_config("system", "cache_cleared_half_hour")) < time() - self::duration(CACHE_HALF_HOUR)) { + if (($max_level <= CACHE_HALF_HOUR) && (get_config("system", "cache_cleared_half_hour")) < time() - self::duration(CACHE_HALF_HOUR)) { q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d", dbesc(datetime_convert('UTC','UTC',"now - 30 minutes")), intval(CACHE_HALF_HOUR)); 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) && (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)); set_config("system", "cache_cleared_quarter_hour", time()); } - if (($max_level <= CACHE_FIVE_MINUTES) AND (get_config("system", "cache_cleared_five_minute")) < time() - self::duration(CACHE_FIVE_MINUTES)) { + if (($max_level <= CACHE_FIVE_MINUTES) && (get_config("system", "cache_cleared_five_minute")) < time() - self::duration(CACHE_FIVE_MINUTES)) { q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d", dbesc(datetime_convert('UTC','UTC',"now - 5 minutes")), intval(CACHE_FIVE_MINUTES)); set_config("system", "cache_cleared_five_minute", time()); } - if (($max_level <= CACHE_MINUTE) AND (get_config("system", "cache_cleared_minute")) < time() - self::duration(CACHE_MINUTE)) { + if (($max_level <= CACHE_MINUTE) && (get_config("system", "cache_cleared_minute")) < time() - self::duration(CACHE_MINUTE)) { q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d", dbesc(datetime_convert('UTC','UTC',"now - 1 minutes")), intval(CACHE_MINUTE));