diff --git a/phpBB/config/default/container/services_console.yml b/phpBB/config/default/container/services_console.yml index 10e0411f40..e4df2c750b 100644 --- a/phpBB/config/default/container/services_console.yml +++ b/phpBB/config/default/container/services_console.yml @@ -128,6 +128,7 @@ services: - '@user' - '@ext.manager' - '@log' + - '%cache.driver.class%' tags: - { name: console.command } @@ -137,6 +138,7 @@ services: - '@user' - '@ext.manager' - '@log' + - '%cache.driver.class%' tags: - { name: console.command } @@ -173,6 +175,7 @@ services: - '@user' - '@ext.manager' - '@log' + - '%cache.driver.class%' tags: - { name: console.command } @@ -191,6 +194,7 @@ services: - '@user' - '@ext.manager' - '@log' + - '%cache.driver.class%' tags: - { name: console.command } diff --git a/phpBB/language/en/cli.php b/phpBB/language/en/cli.php index 27bcdf1019..bdd76a32e5 100644 --- a/phpBB/language/en/cli.php +++ b/phpBB/language/en/cli.php @@ -35,6 +35,8 @@ if (empty($lang) || !is_array($lang)) // in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine $lang = array_merge($lang, array( + 'CLI_APCU_CACHE_NOTICE' => 'APCu cache has to be purged through the Administration Control Panel.', + 'CLI_CONFIG_CANNOT_CACHED' => 'Set this option if the configuration option changes too frequently to be efficiently cached.', 'CLI_CONFIG_CURRENT' => 'Current configuration value, use 0 and 1 to specify boolean values', 'CLI_CONFIG_DELETE_SUCCESS' => 'Successfully deleted config %s.', diff --git a/phpBB/phpbb/cache/driver/apcu.php b/phpBB/phpbb/cache/driver/apcu.php index c96cf0de57..6bcc13cf78 100644 --- a/phpBB/phpbb/cache/driver/apcu.php +++ b/phpBB/phpbb/cache/driver/apcu.php @@ -25,11 +25,14 @@ class apcu extends \phpbb\cache\driver\memory */ function purge() { - /* - * Use an iterator to selectively delete our cache entries without disturbing - * any other cache users (e.g. other phpBB boards hosted on this server) - */ - apcu_delete(new \APCUIterator('#^' . $this->key_prefix . '#')); + if (PHP_SAPI !== 'cli' || @ini_get('apc.enable_cli')) + { + /* + * Use an iterator to selectively delete our cache entries without disturbing + * any other cache users (e.g. other phpBB boards hosted on this server) + */ + apcu_delete(new \APCUIterator('#^' . $this->key_prefix . '#')); + } parent::purge(); } diff --git a/phpBB/phpbb/console/command/extension/command.php b/phpBB/phpbb/console/command/extension/command.php index 364d954082..6b58290913 100644 --- a/phpBB/phpbb/console/command/extension/command.php +++ b/phpBB/phpbb/console/command/extension/command.php @@ -12,6 +12,8 @@ */ namespace phpbb\console\command\extension; +use Symfony\Component\Console\Style\SymfonyStyle; + abstract class command extends \phpbb\console\command\command { /** @var \phpbb\extension\manager */ @@ -20,11 +22,37 @@ abstract class command extends \phpbb\console\command\command /** @var \phpbb\log\log */ protected $log; - public function __construct(\phpbb\user $user, \phpbb\extension\manager $manager, \phpbb\log\log $log) + /** @var string Cache driver class */ + protected $cache_driver_class; + + /** + * Constructor. + * + * @param \phpbb\user $user User object + * @param \phpbb\extension\manager $manager Extension manager object + * @param \phpbb\log\log $log Log object + * @param string $cache_driver_class Cache driver class + */ + public function __construct(\phpbb\user $user, \phpbb\extension\manager $manager, \phpbb\log\log $log, $cache_driver_class) { $this->manager = $manager; $this->log = $log; + $this->cache_driver_class = $cache_driver_class; parent::__construct($user); } + + /** + * Check if APCu cache driver is used and enabled for CLI, otherwise display a notice. + * + * @param SymfonyStyle $io + * @return void + */ + protected function check_apcu_cache(SymfonyStyle $io) + { + if ($this->cache_driver_class === 'phpbb\\cache\\driver\\apcu' && !@ini_get('apc.enable_cli')) + { + $io->note($this->user->lang('CLI_APCU_CACHE_NOTICE')); + } + } } diff --git a/phpBB/phpbb/console/command/extension/disable.php b/phpBB/phpbb/console/command/extension/disable.php index b2e10fb960..4d51bd7be5 100644 --- a/phpBB/phpbb/console/command/extension/disable.php +++ b/phpBB/phpbb/console/command/extension/disable.php @@ -55,6 +55,7 @@ class disable extends command else { $this->log->add('admin', ANONYMOUS, '', 'LOG_EXT_DISABLE', time(), array($name)); + $this->check_apcu_cache($io); $io->success($this->user->lang('CLI_EXTENSION_DISABLE_SUCCESS', $name)); return 0; } diff --git a/phpBB/phpbb/console/command/extension/enable.php b/phpBB/phpbb/console/command/extension/enable.php index 504b5546b3..00decc8607 100644 --- a/phpBB/phpbb/console/command/extension/enable.php +++ b/phpBB/phpbb/console/command/extension/enable.php @@ -66,6 +66,7 @@ class enable extends command if ($this->manager->is_enabled($name)) { $this->log->add('admin', ANONYMOUS, '', 'LOG_EXT_ENABLE', time(), array($name)); + $this->check_apcu_cache($io); $io->success($this->user->lang('CLI_EXTENSION_ENABLE_SUCCESS', $name)); return 0; } diff --git a/phpBB/phpbb/console/command/extension/purge.php b/phpBB/phpbb/console/command/extension/purge.php index 25bde503f7..9aa925e9f6 100644 --- a/phpBB/phpbb/console/command/extension/purge.php +++ b/phpBB/phpbb/console/command/extension/purge.php @@ -48,6 +48,7 @@ class purge extends command else { $this->log->add('admin', ANONYMOUS, '', 'LOG_EXT_PURGE', time(), array($name)); + $this->check_apcu_cache($io); $io->success($this->user->lang('CLI_EXTENSION_PURGE_SUCCESS', $name)); return 0; }