[TASK] Use Environment API instead of PATH_site for Cache Backends 61/57161/5
authorBenni Mack <benni@typo3.org>
Sat, 9 Jun 2018 15:58:40 +0000 (17:58 +0200)
committerTymoteusz Motylewski <t.motylewski@gmail.com>
Wed, 13 Jun 2018 14:37:37 +0000 (16:37 +0200)
The new Environment API is now used to define hashes or base paths
in cache backend classes.

Resolves: #85200
Releases: master
Change-Id: I08f770bf959274995e7983b800d8a569aee7cd47
Reviewed-on: https://review.typo3.org/57161
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Tymoteusz Motylewski <t.motylewski@gmail.com>
Tested-by: Tymoteusz Motylewski <t.motylewski@gmail.com>
typo3/sysext/core/Classes/Cache/Backend/ApcBackend.php
typo3/sysext/core/Classes/Cache/Backend/ApcuBackend.php
typo3/sysext/core/Classes/Cache/Backend/MemcachedBackend.php
typo3/sysext/core/Classes/Cache/Backend/SimpleFileBackend.php
typo3/sysext/core/Tests/Unit/Cache/Backend/FileBackendTest.php

index 4d770f7..ea77c68 100644 (file)
@@ -14,6 +14,8 @@ namespace TYPO3\CMS\Core\Cache\Backend;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Core\Environment;
+
 /**
  * A caching backend which stores cache entries by using APC.
  *
@@ -30,13 +32,13 @@ namespace TYPO3\CMS\Core\Cache\Backend;
  * Each key is prepended with a prefix. By default prefix consists from two parts
  * separated by underscore character and ends in yet another underscore character:
  * - "TYPO3"
- * - MD5 of path to TYPO3 and user running TYPO3
+ * - MD5 of path to TYPO3 project folder and user running TYPO3
  * This prefix makes sure that keys from the different installations do not
  * conflict.
  *
  * @api
  */
-class ApcBackend extends \TYPO3\CMS\Core\Cache\Backend\AbstractBackend implements \TYPO3\CMS\Core\Cache\Backend\TaggableBackendInterface
+class ApcBackend extends AbstractBackend implements TaggableBackendInterface
 {
     /**
      * A prefix to separate stored data from other data possible stored in the APC
@@ -92,7 +94,7 @@ class ApcBackend extends \TYPO3\CMS\Core\Cache\Backend\AbstractBackend implement
     {
         parent::setCache($cache);
         $processUser = $this->getCurrentUserData();
-        $pathHash = \TYPO3\CMS\Core\Utility\GeneralUtility::shortMD5($this->getPathSite() . $processUser['name'] . $this->context . $cache->getIdentifier(), 12);
+        $pathHash = \TYPO3\CMS\Core\Utility\GeneralUtility::shortMD5(Environment::getProjectPath() . $processUser['name'] . $this->context . $cache->getIdentifier(), 12);
         $this->setIdentifierPrefix('TYPO3_' . $pathHash);
     }
 
@@ -108,16 +110,6 @@ class ApcBackend extends \TYPO3\CMS\Core\Cache\Backend\AbstractBackend implement
     }
 
     /**
-     * Returns the PATH_site constant.
-     *
-     * @return string
-     */
-    protected function getPathSite()
-    {
-        return PATH_site;
-    }
-
-    /**
      * Saves data in the cache.
      *
      * @param string $entryIdentifier An identifier for this specific cache entry
index ff64737..a0076ab 100644 (file)
@@ -15,6 +15,7 @@ namespace TYPO3\CMS\Core\Cache\Backend;
  */
 
 use TYPO3\CMS\Core\Cache;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
@@ -95,7 +96,7 @@ class ApcuBackend extends AbstractBackend implements TaggableBackendInterface
     {
         parent::setCache($cache);
         $processUser = $this->getCurrentUserData();
-        $pathHash = GeneralUtility::shortMD5($this->getPathSite() . $processUser['name'] . $this->context . $cache->getIdentifier(), 12);
+        $pathHash = GeneralUtility::shortMD5(Environment::getProjectPath() . $processUser['name'] . $this->context . $cache->getIdentifier(), 12);
         $this->setIdentifierPrefix('TYPO3_' . $pathHash);
     }
 
@@ -111,16 +112,6 @@ class ApcuBackend extends AbstractBackend implements TaggableBackendInterface
     }
 
     /**
-     * Returns the PATH_site constant.
-     *
-     * @return string
-     */
-    protected function getPathSite()
-    {
-        return PATH_site;
-    }
-
-    /**
      * Saves data in the cache.
      *
      * @param string $entryIdentifier An identifier for this specific cache entry
index b215ae4..00fc15b 100644 (file)
@@ -16,6 +16,7 @@ namespace TYPO3\CMS\Core\Cache\Backend;
 
 use TYPO3\CMS\Core\Cache\Exception;
 use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
+use TYPO3\CMS\Core\Core\Environment;
 
 /**
  * A caching backend which stores cache entries by using Memcached.
@@ -33,7 +34,7 @@ use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
  * Each key is prepended with a prefix. By default prefix consists from two parts
  * separated by underscore character and ends in yet another underscore character:
  * - "TYPO3"
- * - Current site path obtained from the PATH_site constant
+ * - Current site path obtained from Environment::getProjectPath()
  * This prefix makes sure that keys from the different installations do not
  * conflict.
  *
@@ -208,7 +209,7 @@ class MemcachedBackend extends AbstractBackend implements TaggableBackendInterfa
     public function setCache(FrontendInterface $cache)
     {
         parent::setCache($cache);
-        $identifierHash = substr(md5(PATH_site . $this->context . $this->cacheIdentifier), 0, 12);
+        $identifierHash = substr(md5(Environment::getProjectPath() . $this->context . $this->cacheIdentifier), 0, 12);
         $this->identifierPrefix = 'TYPO3_' . $identifierHash . '_';
     }
 
@@ -221,7 +222,6 @@ class MemcachedBackend extends AbstractBackend implements TaggableBackendInterfa
      * @param int $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited lifetime.
      * @throws Exception if no cache frontend has been set.
      * @throws \InvalidArgumentException if the identifier is not valid or the final memcached key is longer than 250 characters
-     * @throws Exception\InvalidDataException if $data is not a string
      * @api
      */
     public function set($entryIdentifier, $data, array $tags = [], $lifetime = null)
index 59b3732..158d2e9 100644 (file)
@@ -26,7 +26,7 @@ use TYPO3\CMS\Core\Utility\StringUtility;
  *
  * @api
  */
-class SimpleFileBackend extends \TYPO3\CMS\Core\Cache\Backend\AbstractBackend implements \TYPO3\CMS\Core\Cache\Backend\PhpCapableBackendInterface
+class SimpleFileBackend extends AbstractBackend implements PhpCapableBackendInterface
 {
     const SEPARATOR = '^';
     const EXPIRYTIME_FORMAT = 'YmdHis';
@@ -98,11 +98,11 @@ class SimpleFileBackend extends \TYPO3\CMS\Core\Cache\Backend\AbstractBackend im
 
     /**
      * Sets the directory where the cache files are stored. By default it is
-     * assumed that the directory is below the TYPO3_DOCUMENT_ROOT. However, an
+     * assumed that the directory is below TYPO3's Project Path. However, an
      * absolute path can be selected, too.
      *
-     * This method enables to use a cache path outside of document root. The final
-     * cache path is checked and created in createFinalCachDirectory(),
+     * This method enables to use a cache path outside of TYPO3's Project Path. The final
+     * cache path is checked and created in createFinalCacheDirectory(),
      * called by setCache() method, which is done _after_ the cacheDirectory
      * option was handled.
      *
@@ -112,24 +112,24 @@ class SimpleFileBackend extends \TYPO3\CMS\Core\Cache\Backend\AbstractBackend im
     public function setCacheDirectory($cacheDirectory)
     {
         // Skip handling if directory is a stream ressource
-        // This is used by unit tests with vfs:// directoryies
+        // This is used by unit tests with vfs:// directories
         if (strpos($cacheDirectory, '://')) {
             $this->temporaryCacheDirectory = $cacheDirectory;
             return;
         }
-        $documentRoot = PATH_site;
+        $documentRoot = Environment::getProjectPath() . '/';
         if ($open_basedir = ini_get('open_basedir')) {
             if (Environment::isWindows()) {
                 $delimiter = ';';
                 $cacheDirectory = str_replace('\\', '/', $cacheDirectory);
                 if (!preg_match('/[A-Z]:/', substr($cacheDirectory, 0, 2))) {
-                    $cacheDirectory = PATH_site . $cacheDirectory;
+                    $cacheDirectory = Environment::getProjectPath() . $cacheDirectory;
                 }
             } else {
                 $delimiter = ':';
                 if ($cacheDirectory[0] !== '/') {
                     // relative path to cache directory.
-                    $cacheDirectory = PATH_site . $cacheDirectory;
+                    $cacheDirectory = Environment::getProjectPath() . $cacheDirectory;
                 }
             }
             $basedirs = explode($delimiter, $open_basedir);
index dc43a80..21382e8 100644 (file)
@@ -23,7 +23,7 @@ use TYPO3\CMS\Core\Cache\Exception;
 use TYPO3\CMS\Core\Cache\Exception\InvalidDataException;
 use TYPO3\CMS\Core\Cache\Frontend\AbstractFrontend;
 use TYPO3\CMS\Core\Cache\Frontend\PhpFrontend;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
 /**
@@ -95,8 +95,7 @@ class FileBackendTest extends UnitTestCase
         $backend = $this->getAccessibleMock(FileBackend::class, ['dummy'], [], '', false);
         $backend->_set('cacheIdentifier', 'test');
         $backend->setCacheDirectory('tmp/foo');
-        // get PATH_site without trailing slash
-        $path = GeneralUtility::fixWindowsFilePath(realpath(PATH_site));
+        $path = Environment::getProjectPath();
         $this->assertEquals($path . '/tmp/foo/test/', $backend->_get('temporaryCacheDirectory'));
     }
 
@@ -108,8 +107,7 @@ class FileBackendTest extends UnitTestCase
         $backend = $this->getAccessibleMock(FileBackend::class, ['dummy'], [], '', false);
         $backend->_set('cacheIdentifier', 'test');
         $backend->setCacheDirectory('tmp/foo/');
-        // get PATH_site without trailing slash
-        $path = GeneralUtility::fixWindowsFilePath(realpath(PATH_site));
+        $path = Environment::getProjectPath();
         $this->assertEquals($path . '/tmp/foo/test/', $backend->_get('temporaryCacheDirectory'));
     }
 
@@ -121,8 +119,7 @@ class FileBackendTest extends UnitTestCase
         $backend = $this->getAccessibleMock(FileBackend::class, ['dummy'], [], '', false);
         $backend->_set('cacheIdentifier', 'test');
         $backend->setCacheDirectory('../tmp/foo');
-        // get PATH_site without trailing slash
-        $path = GeneralUtility::fixWindowsFilePath(realpath(PATH_site));
+        $path = Environment::getProjectPath();
         $this->assertEquals($path . '/../tmp/foo/test/', $backend->_get('temporaryCacheDirectory'));
     }
 
@@ -134,8 +131,7 @@ class FileBackendTest extends UnitTestCase
         $backend = $this->getAccessibleMock(FileBackend::class, ['dummy'], [], '', false);
         $backend->_set('cacheIdentifier', 'test');
         $backend->setCacheDirectory('../tmp/foo/');
-        // get PATH_site without trailing slash
-        $path = GeneralUtility::fixWindowsFilePath(realpath(PATH_site));
+        $path = Environment::getProjectPath();
         $this->assertEquals($path . '/../tmp/foo/test/', $backend->_get('temporaryCacheDirectory'));
     }