Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Cache; Chris@0: Chris@0: /** Chris@0: * Filesystem cache driver. Chris@0: * Chris@0: * @since 2.3 Chris@0: * @author Fabio B. Silva Chris@0: */ Chris@0: class FilesystemCache extends FileCache Chris@0: { Chris@0: const EXTENSION = '.doctrinecache.data'; Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function __construct($directory, $extension = self::EXTENSION, $umask = 0002) Chris@0: { Chris@0: parent::__construct($directory, $extension, $umask); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doFetch($id) Chris@0: { Chris@0: $data = ''; Chris@0: $lifetime = -1; Chris@0: $filename = $this->getFilename($id); Chris@0: Chris@0: if ( ! is_file($filename)) { Chris@0: return false; Chris@0: } Chris@0: Chris@0: $resource = fopen($filename, "r"); Chris@0: Chris@0: if (false !== ($line = fgets($resource))) { Chris@0: $lifetime = (int) $line; Chris@0: } Chris@0: Chris@0: if ($lifetime !== 0 && $lifetime < time()) { Chris@0: fclose($resource); Chris@0: Chris@0: return false; Chris@0: } Chris@0: Chris@0: while (false !== ($line = fgets($resource))) { Chris@0: $data .= $line; Chris@0: } Chris@0: Chris@0: fclose($resource); Chris@0: Chris@0: return unserialize($data); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doContains($id) Chris@0: { Chris@0: $lifetime = -1; Chris@0: $filename = $this->getFilename($id); Chris@0: Chris@0: if ( ! is_file($filename)) { Chris@0: return false; Chris@0: } Chris@0: Chris@0: $resource = fopen($filename, "r"); Chris@0: Chris@0: if (false !== ($line = fgets($resource))) { Chris@0: $lifetime = (int) $line; Chris@0: } Chris@0: Chris@0: fclose($resource); Chris@0: Chris@0: return $lifetime === 0 || $lifetime > time(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doSave($id, $data, $lifeTime = 0) Chris@0: { Chris@0: if ($lifeTime > 0) { Chris@0: $lifeTime = time() + $lifeTime; Chris@0: } Chris@0: Chris@0: $data = serialize($data); Chris@0: $filename = $this->getFilename($id); Chris@0: Chris@0: return $this->writeFile($filename, $lifeTime . PHP_EOL . $data); Chris@0: } Chris@0: }