Edit file File name : class.A2OptMemcache.php Content :<?php class A2OptMemcache extends A2OptBase { public function __construct() { parent::__construct(); } public function apply_action() { switch ($this->action) { case 'enable': $this->enable(); break; case 'disable': $this->disable(); break; case 'enable_redis': $this->enable_redis(); break; case 'disable_redis': $this->disable_redis(); break; case 'is_enabled': $this->is_enabled(); break; case 'get_instances': $this->get_instances(); break; case 'get_stats': $this->get_stats(); break; case 'flush': $this->flush(); break; case 'reset': $this->reset(); break; case 'restart': $this->restart(); break; default: $this->error('No action was given.'); } } public function is_enabled() { $enabled = false; if (!isset($this->app) || !isset($this->app->type)) { $this->error('Application data missing.'); } switch ($this->app->type) { case 'WordPress': $wp = new A2OptWordPress($this->app); $enabled = $wp->is_memcached_enabled(); break; case 'PrestaShop': $this->app->ps_ver = $this->get_prestashop_version($this->app->path); $ps = new A2OptPrestaShop($this->app); $enabled = $ps->is_memcached_enabled(); break; case 'Drupal': case 'Drupal 9': $this->app->dr_ver = $this->get_drupal_version($this->app->path); $drupal = $this->get_drupal_object($this->app); $enabled = $drupal->is_memcached_enabled(); break; case 'Joomla': $joomla = new A2OptJoomla($this->app); $enabled = $joomla->is_memcached_enabled(); break; case 'Magento': $magento = new A2OptMagento($this->app); $enabled = $magento->is_memcached_enabled(); break; case 'OpenCart': $opencart = new A2OptOpenCart($this->app); $enabled = $opencart->is_memcached_enabled(); break; } if (!isset($this->app->swiftcache)) { $this->app->swiftcache = new stdClass(); } if (!isset($this->app->swiftcache->memcached)) { $this->app->swiftcache->memcached = new stdClass(); } $this->app->swiftcache->memcached->enabled = $enabled; $this->update_app_list(); echo json_encode($enabled); } public function enable() { if ($this->is_cagefs()) { $username = escapeshellarg($this->username); $php_versions = [ '5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2' ]; foreach ($php_versions as $php_ver) { $res = shell_exec("/usr/bin/selectorctl --interpreter=php --enable-user-extensions=memcache,memcached --user={$username} --version={$php_ver}"); $res = shell_exec("/usr/bin/selectorctl --interpreter=php --enable-user-extensions=redis --user={$username} --version={$php_ver}"); } } $memcached = new MemcacheLite($this->instance); if (is_dir("/home/{$this->username}")) { touch("/home/{$this->username}/.memcached.on"); } if (count($memcached->get_stats(false)) == 0) { $memcached->start_server(); } switch ($this->app->type) { case 'WordPress': $wp = new A2OptWordPress($this->app); $wp->enable_memcached(); break; case 'PrestaShop': $this->app->ps_ver = $this->get_prestashop_version($this->app->path); $ps = new A2OptPrestaShop($this->app); $ps->enable_memcached(); break; case 'Drupal': case 'Drupal 9': $this->app->dr_ver = $this->get_drupal_version($this->app->path); $drupal = $this->get_drupal_object($this->app); $drupal->enable_memcached(); break; case 'Joomla': $joomla = new A2OptJoomla($this->app); $joomla->enable_memcached(); break; case 'Magento': $magento = new A2OptMagento($this->app); $magento->enable_memcached(); break; case 'OpenCart': $opencart = new A2OptOpenCart($this->app); $opencart->enable_memcached(); break; } $this->app->swiftcache->memcached->enabled = true; $this->update_app_list(); echo json_encode($this->app); } public function enable_redis() { if (is_dir("/home/{$this->username}")) { touch("/home/{$this->username}/.redis.on"); } switch ($this->app->type) { case 'WordPress': $wp = new A2OptWordPress($this->app); $wp->enable_redis(); break; } $this->app->swiftcache->memcached->redis_enabled = true; $this->update_app_list(); echo json_encode($this->app); } public function disable() { switch ($this->app->type) { case 'WordPress': $wp = new A2OptWordPress($this->app); $wp->disable_memcached(); break; case 'Drupal': case 'Drupal 9': $this->app->dr_ver = $this->get_drupal_version($this->app->path); $drupal = $this->get_drupal_object($this->app); $drupal->disable_memcached(); break; case 'PrestaShop': $this->app->ps_ver = $this->get_prestashop_version($this->app->path); $ps = new A2OptPrestaShop($this->app); $ps->disable_memcached(); break; case 'Joomla': $joomla = new A2OptJoomla($this->app); $joomla->disable_memcached(); break; case 'Magento': $magento = new A2OptMagento($this->app); $magento->disable_memcached(); break; case 'OpenCart': $opencart = new A2OptOpenCart($this->app); $opencart->disable_memcached(); break; } $this->app->swiftcache->memcached->enabled = false; $this->update_app_list(); if ( !$this->is_used() ) { $this->turn_off(); } echo json_encode($this->app); } public function disable_redis() { switch ($this->app->type) { case 'WordPress': $wp = new A2OptWordPress($this->app); $wp->disable_redis(); break; } $this->app->swiftcache->memcached->redis_enabled = false; $this->update_app_list(); echo json_encode($this->app); } public function is_used() { foreach ($this->apps as $key => $app) { if ( is_object($app)) { if (isset($app->swiftcache->memcached->enabled) && $app->swiftcache->memcached->enabled) { return true; } } elseif (is_array($app)) { if (isset($app['swiftcache']['memcached']['enabled']) && $app['swiftcache']['memcached']['enabled']) { return true; } } } return false; } public function turn_off() { if (file_exists("/home/{$this->username}/.memcached.on")) { unlink("/home/{$this->username}/.memcached.on"); } } public function get_stats() { if (!is_null($this->instance)) { $memcache = new MemcacheLite($this->instance); $stats = $memcache->get_stats(); if ($stats != '') { echo json_encode($stats); } else { $this->error('The memcachd server is down.'); } } else { $this->error('There was no information about the memcached server to get stats.'); } } public function flush() { if (!is_null($this->instance)) { //echo json_encode($this->instance); $memcache = new MemcacheLite($this->instance); echo json_encode($memcache->flush_all()); } } public function reset() { if (!is_null($this->instance)) { //echo json_encode($this->instance); $memcache = new MemcacheLite($this->instance); echo json_encode($memcache->reset_stats()); } } public function restart() { if (!is_null($this->instance)) { $memcache = new MemcacheLite($this->instance); $memcache->restart_server(); echo json_encode(true); } } public function get_instances($echo = true) { $json = (object) []; if (file_exists("/opt/memcached/etc/conf/{$this->username}.conf")) { $csv = file("/opt/memcached/etc/conf/{$this->username}.conf"); foreach ($csv as $linenum => $instance) { $instance = explode(',', $instance); $instance = new MemcachedInstance($instance[0], $this->username); $json->{$instance->id} = $instance->get_instance(); } } else { $instance = new MemcachedInstance(1, $this->username); $json->{$instance->id} = $instance->get_instance(); } if ($echo) { echo empty($json) ? '[]' : json_encode($json); } else { return $json; } } } Save