/** * Initialize the cache properties */ protected static function initialize() { $apcVersion = phpversion('apc'); $xcVersion = phpversion('xcache'); static::$supportedCaches = array('OPcache' => array('active' => extension_loaded('Zend OPcache') && ini_get('opcache.enable') === '1', 'version' => phpversion('Zend OPcache'), 'canReset' => TRUE, 'canInvalidate' => function_exists('opcache_invalidate'), 'error' => FALSE, 'clearCallback' => function ($fileAbsPath) { if ($fileAbsPath !== NULL && function_exists('opcache_invalidate')) { opcache_invalidate($fileAbsPath); } else { opcache_reset(); } }), 'APC' => array('active' => extension_loaded('apc') && !extension_loaded('apcu') && ini_get('apc.enabled') === '1', 'version' => $apcVersion, 'canReset' => TRUE, 'canInvalidate' => self::canApcInvalidate(), 'error' => $apcVersion && VersionNumberUtility::convertVersionNumberToInteger($apcVersion) < 3001007, 'clearCallback' => function ($fileAbsPath) { if ($fileAbsPath !== NULL && 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. apc_delete_file($fileAbsPath); } else { apc_clear_cache('opcode'); } }), 'WinCache' => array('active' => extension_loaded('wincache') && ini_get('wincache.ocenabled') === '1', 'version' => phpversion('wincache'), 'canReset' => FALSE, 'canInvalidate' => TRUE, 'error' => FALSE, 'clearCallback' => function ($fileAbsPath) { if ($fileAbsPath !== NULL) { wincache_refresh_if_changed(array($fileAbsPath)); } else { // No argument means refreshing all. wincache_refresh_if_changed(); } }), 'XCache' => array('active' => extension_loaded('xcache'), 'version' => $xcVersion, 'canReset' => TRUE, 'canInvalidate' => FALSE, 'error' => FALSE, 'clearCallback' => $xcVersion && VersionNumberUtility::convertVersionNumberToInteger($xcVersion) < 3000000 ? function ($fileAbsPath) { if (!ini_get('xcache.admin.enable_auth')) { xcache_clear_cache(XC_TYPE_PHP, 0); } } : function ($fileAbsPath) { if (!ini_get('xcache.admin.enable_auth')) { xcache_clear_cache(XC_TYPE_PHP); } }), 'eAccelerator' => array('active' => extension_loaded('eAccelerator'), 'version' => phpversion('eaccelerator'), 'canReset' => FALSE, 'canInvalidate' => FALSE, 'error' => TRUE, 'clearCallback' => function ($fileAbsPath) { eaccelerator_clear(); }), 'ZendOptimizerPlus' => array('active' => extension_loaded('Zend Optimizer+') && ini_get('zend_optimizerplus.enable') === '1', 'version' => phpversion('Zend Optimizer+'), 'canReset' => TRUE, 'canInvalidate' => FALSE, 'error' => FALSE, 'clearCallback' => function ($fileAbsPath) { accelerator_reset(); })); static::$activeCaches = array(); // Cache the active ones foreach (static::$supportedCaches as $opcodeCache => $properties) { if ($properties['active']) { static::$activeCaches[$opcodeCache] = $properties; } } }
/** * Initialize the cache properties * * @return void */ protected static function initialize() { $apcVersion = phpversion('apc'); $xcVersion = phpversion('xcache'); static::$supportedCaches = array('OPcache' => array('active' => extension_loaded('Zend OPcache') && ini_get('opcache.enable') === '1', 'version' => phpversion('Zend OPcache'), 'canReset' => true, 'canInvalidate' => function_exists('opcache_invalidate'), 'error' => false, 'clearCallback' => function ($fileAbsPath) { if ($fileAbsPath !== null && function_exists('opcache_invalidate')) { opcache_invalidate($fileAbsPath, true); } else { opcache_reset(); } }), 'APC' => array('active' => extension_loaded('apc') && !extension_loaded('apcu') && ini_get('apc.enabled') === '1', 'version' => $apcVersion, 'canReset' => true, 'canInvalidate' => self::canApcInvalidate(), 'error' => $apcVersion && version_compare($apcVersion, '3.1.7', '<'), 'clearCallback' => function ($fileAbsPath) { if ($fileAbsPath !== null && iMSCP_Utility_OpcodeCache::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. @apc_delete_file($fileAbsPath); } else { apc_clear_cache('opcode'); } }), 'XCache' => array('active' => extension_loaded('xcache'), 'version' => $xcVersion, 'canReset' => true, 'canInvalidate' => false, 'error' => false, 'clearCallback' => $xcVersion && version_compare($xcVersion, '3.0.0', '<') ? function () { if (!ini_get('xcache.admin.enable_auth')) { xcache_clear_cache(XC_TYPE_PHP, 0); } } : function () { if (!ini_get('xcache.admin.enable_auth')) { xcache_clear_cache(XC_TYPE_PHP); } }), 'eAccelerator' => array('active' => extension_loaded('eAccelerator'), 'version' => phpversion('eaccelerator'), 'canReset' => false, 'canInvalidate' => false, 'error' => false, 'clearCallback' => function () { eaccelerator_clear(); }), 'ZendOptimizerPlus' => array('active' => extension_loaded('Zend Optimizer+') && ini_get('zend_optimizerplus.enable') === '1', 'version' => phpversion('Zend Optimizer+'), 'canReset' => true, 'canInvalidate' => false, 'error' => false, 'clearCallback' => function () { accelerator_reset(); })); static::$activeCaches = array(); // Cache the active ones foreach (static::$supportedCaches as $opcodeCache => $properties) { if ($properties['active']) { static::$activeCaches[$opcodeCache] = $properties; } } }