diff --git a/DataStorage/Cache/CacheFactory.php b/DataStorage/Cache/CacheFactory.php index 6760ba8fb..eb126955e 100644 --- a/DataStorage/Cache/CacheFactory.php +++ b/DataStorage/Cache/CacheFactory.php @@ -13,7 +13,8 @@ * @version 1.0.0 * @link http://orange-management.com */ -namespace phpOMS\DataStorage\Database\Connection; +namespace phpOMS\DataStorage\Cache; + use phpOMS\DataStorage\Cache\CacheInterface; use phpOMS\DataStorage\Cache\FileCache; diff --git a/DataStorage/Cache/CachePool.php b/DataStorage/Cache/CachePool.php index 915432811..3f578bfef 100644 --- a/DataStorage/Cache/CachePool.php +++ b/DataStorage/Cache/CachePool.php @@ -17,7 +17,7 @@ namespace phpOMS\DataStorage\Cache; use phpOMS\Config\OptionsInterface; use phpOMS\Config\OptionsTrait; -use phpOMS\DataStorage\Database\Connection\CacheFactory; +use phpOMS\DataStorage\Cache\CacheFactory; /** diff --git a/DataStorage/Cache/FileCache.php b/DataStorage/Cache/FileCache.php index 582d20115..f1afed11e 100644 --- a/DataStorage/Cache/FileCache.php +++ b/DataStorage/Cache/FileCache.php @@ -260,9 +260,9 @@ class FileCache implements CacheInterface private function getExpire(string $raw) : int { $expireStart = strpos($raw, self::DELIM); - $expireEnd = strpos($raw, self::DELIM, $expireStart); + $expireEnd = strpos($raw, self::DELIM, $expireStart+1); - return (int) substr($raw, $expireStart, $expireEnd); + return (int) substr($raw, $expireStart+1, $expireEnd - ($expireStart+1)); } /** @@ -274,8 +274,14 @@ class FileCache implements CacheInterface return null; } - $name = Directory::sanitize($key); - $created = Directory::created($path = $this->cachePath . '/' . $name)->getTimestamp(); + $name = File::sanitize($key); + $path = $this->cachePath . '/' . $name; + + if(!file_exists($path)) { + return null; + } + + $created = Directory::created($path)->getTimestamp(); $now = time(); if ($expire >= 0 && $created + $expire > $now) { @@ -286,10 +292,10 @@ class FileCache implements CacheInterface $type = $raw[0]; $expireStart = strpos($raw, self::DELIM); - $expireEnd = strpos($raw, self::DELIM, $expireStart); - $cacheExpire = substr($raw, $expireStart, $expireEnd); + $expireEnd = strpos($raw, self::DELIM, $expireStart+1); + $cacheExpire = substr($raw, $expireStart+1, $expireEnd - ($expireStart+1)); - if ($cacheExpire >= 0 && $created + $cacheExpire > $now) { + if ($cacheExpire >= 0 && $created + $cacheExpire < $now) { $this->delete($key); return null; @@ -316,7 +322,7 @@ class FileCache implements CacheInterface case CacheType::_SERIALIZABLE: case CacheType::_JSONSERIALIZABLE: $namespaceStart = strpos($raw, self::DELIM, $expireEnd); - $namespaceEnd = strpos($raw, self::DELIM, $namespaceStart); + $namespaceEnd = strpos($raw, self::DELIM, $namespaceStart+1); $namespace = substr($raw, $namespaceStart, $namespaceEnd); $value = $namespace::unserialize(substr($raw, $namespaceEnd + 1)); @@ -349,8 +355,8 @@ class FileCache implements CacheInterface $now = time(); $raw = file_get_contents($path); $expireStart = strpos($raw, self::DELIM); - $expireEnd = strpos($raw, self::DELIM, $expireStart); - $cacheExpire = substr($raw, $expireStart, $expireEnd); + $expireEnd = strpos($raw, self::DELIM, $expireStart+1); + $cacheExpire = substr($raw, $expireStart+1, $expireEnd - ($expireStart+1)); if ($cacheExpire >= 0 && $created + $cacheExpire > $now) { unlink($path); diff --git a/System/File/Local/Directory.php b/System/File/Local/Directory.php index 140094950..c39db39ca 100644 --- a/System/File/Local/Directory.php +++ b/System/File/Local/Directory.php @@ -192,10 +192,21 @@ class Directory extends FileAbstract implements DirectoryInterface /** * {@inheritdoc} + * todo: move to fileAbastract since it should be the same for file and directory? */ public static function created(string $path) : \DateTime { - // TODO: Implement created() method. + if(!file_exists($path)) { + $created = new \DateTime(); + $created->setTimestamp(0); + + return $created; + } + + $created = new \DateTime('now'); + $created->setTimestamp(filemtime($path)); + + return $created; } /** diff --git a/System/File/Local/File.php b/System/File/Local/File.php index 38a3737bf..a4aaa6088 100644 --- a/System/File/Local/File.php +++ b/System/File/Local/File.php @@ -145,7 +145,7 @@ class File extends FileAbstract implements FileInterface */ public static function sanitize(string $path) : string { - return preg_replace('[^\w\s\d\.\-_~,;:\[\]\(\]]', '', $path); + return preg_replace('/[^\w\s\d\.\-_~,;\[\]\(\]]/', '', $path); } /**