[BUGFIX] OpCache XCache cannot be cleared if xcache.admin.enable_auth
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Utility / OpcodeCacheUtility.php
index efe6c73..af78c5d 100644 (file)
@@ -89,7 +89,7 @@ class OpcodeCacheUtility {
                                // Versions lower then 3.1.7 are known as malfunction
                                'error' => $apcVersion && VersionNumberUtility::convertVersionNumberToInteger($apcVersion) < 3001007,
                                'clearCallback' => function ($fileAbsPath) {
-                                       if (static::$supportedCaches['APC']['canInvalidate']) {
+                                       if (OpcodeCacheUtility::getCanInvalidate('APC')) {
                                                // This may output a warning like: PHP Warning: apc_delete_file(): Could not stat file
                                                // This warning isn't true, this means that apc was unable to generate the cache key
                                                // which depends on the configuration of APC.
@@ -120,7 +120,9 @@ class OpcodeCacheUtility {
                                'canInvalidate' => FALSE,
                                'error' => FALSE,
                                'clearCallback' => function ($fileAbsPath) {
-                                       xcache_clear_cache(XC_TYPE_PHP);
+                                       if (!ini_get('xcache.admin.enable_auth')) {
+                                               xcache_clear_cache(XC_TYPE_PHP);
+                                       }
                                }
                        ),
 
@@ -164,6 +166,20 @@ class OpcodeCacheUtility {
        }
 
        /**
+        * Gets the state of canInvalidate for given cache system.
+        *
+        * @param string $system The cache system to test (APC, ...)
+        *
+        * @return boolean The calculated value from array or FALSE if cache system not exists.
+        * @internal Do not rely on this function. Will be removed if PHP5.4 is minimum requirement.
+        */
+       static public function getCanInvalidate($system) {
+               return isset(static::$supportedCaches[$system])
+                       ? static::$supportedCaches[$system]['canInvalidate']
+                       : FALSE;
+       }
+
+       /**
         * Clears a file from an opcache, if one exists.
         *
         * @param string $fileAbsPath The file as absolute path to be cleared.