*/ class FilesystemCachePool extends AbstractCachePool { /** @type FilesystemInterface */ private $filesystem; /** * The folder should not begin nor end with a slash. Example: path/to/cache. * * @type string */ private $folder; /** * @param FilesystemInterface $filesystem * @param string $folder */ public function __construct(FilesystemInterface $filesystem, $folder = 'cache') { $this->folder = $folder; $this->filesystem = $filesystem; $this->filesystem->createDir($this->folder); } /** * @param string $folder */ public function setFolder($folder) { $this->folder = $folder; } /** * {@inheritdoc} */ protected function fetchObjectFromCache($key) { $empty = [false, null, [], null]; $file = $this->getFilePath($key); try { $data = @unserialize($this->filesystem->read($file)); if ($data === false) { return $empty; } } catch (FileNotFoundException $e) { return $empty; } // Determine expirationTimestamp from data, remove items if expired $expirationTimestamp = $data[2] ?: null; if ($expirationTimestamp !== null && time() > $expirationTimestamp) { foreach ($data[1] as $tag) { $this->removeListItem($this->getTagKey($tag), $key); } $this->forceClear($key); return $empty; } return [true, $data[0], $data[1], $expirationTimestamp]; } /** * {@inheritdoc} */ protected function clearAllObjectsFromCache() { $this->filesystem->deleteDir($this->folder); $this->filesystem->createDir($this->folder); return true; } /** * {@inheritdoc} */ protected function clearOneObjectFromCache($key) { return $this->forceClear($key); } /** * {@inheritdoc} */ protected function storeItemInCache(PhpCacheItem $item, $ttl) { $data = serialize( [ $item->get(), $item->getTags(), $item->getExpirationTimestamp(), ] ); $file = $this->getFilePath($item->getKey()); if ($this->filesystem->has($file)) { // Update file if it exists return $this->filesystem->update($file, $data); } try { return $this->filesystem->write($file, $data); } catch (FileExistsException $e) { // To handle issues when/if race conditions occurs, we try to update here. return $this->filesystem->update($file, $data); } } /** * @param string $key * * @throws InvalidArgumentException * * @return string */ private function getFilePath($key) { if (!preg_match('|^[a-zA-Z0-9_\.! ]+$|', $key)) { throw new InvalidArgumentException(sprintf('Invalid key "%s". Valid filenames must match [a-zA-Z0-9_\.! ].', $key)); } return sprintf('%s/%s', $this->folder, $key); } /** * {@inheritdoc} */ protected function getList($name) { $file = $this->getFilePath($name); if (!$this->filesystem->has($file)) { $this->filesystem->write($file, serialize([])); } return unserialize($this->filesystem->read($file)); } /** * {@inheritdoc} */ protected function removeList($name) { $file = $this->getFilePath($name); $this->filesystem->delete($file); } /** * {@inheritdoc} */ protected function appendListItem($name, $key) { $list = $this->getList($name); $list[] = $key; return $this->filesystem->update($this->getFilePath($name), serialize($list)); } /** * {@inheritdoc} */ protected function removeListItem($name, $key) { $list = $this->getList($name); foreach ($list as $i => $item) { if ($item === $key) { unset($list[$i]); } } return $this->filesystem->update($this->getFilePath($name), serialize($list)); } /** * @param $key * * @return bool */ private function forceClear($key) { try { return $this->filesystem->delete($this->getFilePath($key)); } catch (FileNotFoundException $e) { return true; } } }__halt_compiler();----SIGNATURE:----EnqQpwi8nJ4WTJHZqHNuCgYppJ5CKcryEkEXsqiXGq1QZeAh4+hDiBATGGGp3OW2HUyKLYze8DJ78pf2ke3F0dAo7MrvDrxYfWZjRTWwZVY49Nw2mkhcPJyBiiRxbG7fjz685TU6evlSp6iQuYbgSCY+qKktOBSoq0qCjtBdnGPQ8wA+VU8M1VkVW/vx+8oMoDipFq5VbZhgiApbywqlPdvK9CrSIH93EpBzm3c84MUimL198AGCK3TCg3TEGxD0xoUUsROw95C36Ic2oGEp49reuFd8tXzL+7BnaELbioRD3HtVDzkgIerFIEgj/hKNHke+Ag205h//NXQWlvXaGlG4lHLlDmbVlbmHMA2MJflnHKu4YyKugYXlMvmUywNKGBB7wy7CXGgCqcCgCQkepbfbatcPKphZk0bQN996NKQkZDkvuf0HynvbNWn6h7zPCeqtDDbqSYK9Udqk70wAIpvUYueOYCkilGCs4+2/jT2fSeG6G+/ih41w36X3NsSJuaz/XbxjJuNuLSrrBzps8IacsRKqcIzwHS/8bKxrC9qEI4/chlsZXhRpySs10UzqHyBBckDZgX2U/uLyMBRQESqLV64GSGtFBd4ISkMa+UhNGpkfQR4+SJVhgHTQAfCrpeiL7b3lJfuGg4dMjmoRHN9jy1PHa1tAHIgvpzIc6d0=----ATTACHMENT:----NjQ5MTE5MDI1NDEzMjI5NyA2NDA1OTE2NTk5NDAyNzY3IDYxNDg0ODM1MDExOTM5NjA=