time()) { return true; } if (is_file($filename)) { unlink($filename); } return false; } /** * Builds a filename/path from group, id and * store. * * @param string $group Group to store data under * @param string $id Unique ID of this data */ protected static function getFilename(string $group, string $id) : string { $id = md5($id); return self::$store . self::$prefix . "{$group}_{$id}"; } /** * Sets the filename prefix to use * * @param string $prefix Filename Prefix to use */ public static function setPrefix($prefix) : void { self::$prefix = $prefix; } /** * Sets the store for cache files. Defaults to * /dev/shm. Must have trailing slash. * * @param string $store The dir to store the cache data in */ public static function setStore($store) : void { self::$store = $store; } } /** * Output Cache extension of base caching class */ class OutputCache extends Cache { /** * Group of currently being recorded data */ private static string $group; /** * ID of currently being recorded data */ private static string $id; /** * Ttl of currently being recorded data */ private static int $ttl; /** * Starts caching off. Returns true if cached, and dumps * the output. False if not cached and start output buffering. * * @param string $group Group to store data under * @param string $id Unique ID of this data * @param int $ttl How long to cache for (in seconds) * @return bool True if cached, false if not */ public static function Start($group, $id, $ttl) : bool { if (self::isCached($group, $id)) { echo self::read($group, $id); return true; } else { ob_start(); self::$group = $group; self::$id = $id; self::$ttl = $ttl; return false; } } /** * Ends caching. Writes data to disk. */ public static function End() : void { $data = ob_get_contents(); ob_end_flush(); self::write(self::$group, self::$id, self::$ttl, $data); } } /** * Data cache extension of base caching class */ class DataCache extends Cache { /** * Retrieves data from the cache * * @param string $group Group this data belongs to * @param string $id Unique ID of the data * @return mixed Either the resulting data, or null */ public static function Get($group, $id) : mixed { if (self::isCached($group, $id)) { return unserialize(self::read($group, $id)); } return null; } /** * Stores data in the cache * * @param string $group Group this data belongs to * @param string $id Unique ID of the data * @param int $ttl How long to cache for (in seconds) * @param mixed $data The data to store */ public static function Put($group, $id, $ttl, $data) : void { self::write($group, $id, $ttl, serialize($data)); } }