cacheDir = $cacheDir; if (!is_dir($this->cacheDir)) { mkdir($this->cacheDir, 0755, true); } } /** * Haal een waarde uit de cache. * * Wanneer het cache-bestand niet bestaat of verlopen is wordt null * teruggegeven; in het laatste geval wordt het bestand direct verwijderd. * * @since 2.6.4 * * @param string $key Sleutel van de op te halen waarde. * @return mixed De gecachte waarde of null. */ public function get(string $key) { $file = $this->getCacheFile($key); if (!file_exists($file)) { return null; } $data = unserialize(file_get_contents($file)); if ($data['expires'] < time()) { unlink($file); return null; } return $data['value']; } /** * Sla een waarde op in de cache met de opgegeven TTL. * * @since 2.6.4 * * @param string $key Sleutel waaronder wordt opgeslagen. * @param mixed $value Te cachen waarde. * @param int $ttl Levensduur in seconden. Default 3600. * @return bool True bij succes, false bij een schrijffout. */ public function set(string $key, $value, int $ttl = 3600): bool { $file = $this->getCacheFile($key); $data = [ 'value' => $value, 'expires' => time() + $ttl ]; return file_put_contents($file, serialize($data)) !== false; } /** * Verwijder een waarde uit de cache. * * Geeft true terug wanneer het bestand niet (meer) bestaat, zodat de * aanroeper dit niet zelf hoeft te controleren. * * @since 2.6.4 * * @param string $key Sleutel die verwijderd moet worden. * @return bool True bij succes of wanneer de sleutel niet bestond. */ public function delete(string $key): bool { $file = $this->getCacheFile($key); if (file_exists($file)) { return unlink($file); } return true; } /** * Wis alle cache-bestanden in de cachemap. * * Submappen worden niet verwijderd, alleen losse bestanden. * * @since 2.6.4 * * @return bool True bij succes. */ public function clear(): bool { $files = glob($this->cacheDir . '/*'); foreach ($files as $file) { if (is_file($file)) { unlink($file); } } return true; } /** * Controleer of een sleutel bestaat en nog geldig is. * * Let op: verlopen bestanden worden hier niet automatisch verwijderd; * controleer vooraf eventueel via get() indien opruiming gewenst is. * * @since 2.6.4 * * @param string $key Sleutel die gecontroleerd moet worden. * @return bool True wanneer de sleutel bestaat en de TTL nog niet verlopen is. */ public function has(string $key): bool { $file = $this->getCacheFile($key); if (!file_exists($file)) { return false; } $data = unserialize(file_get_contents($file)); return $data['expires'] > time(); } /** * Bepaal het pad naar het cache-bestand voor een sleutel. * * De sleutel wordt gehashed met md5 zodat deze veilig als bestandsnaam * gebruikt kan worden, ongeacht de lengte of tekenset van de sleutel. * * @since 2.6.4 * * @param string $key Cache-sleutel. * @return string Volledig pad naar het cache-bestand. */ private function getCacheFile(string $key): string { return $this->cacheDir . '/' . md5($key) . '.cache'; } }