hosting:cms:opencart:memcached

2.13.4.9. Настройка Memcache(d) в OpenCart

Чтобы включить поддержку Memcached в OpenCart 3.0:

  1. В конце каждого из двух конфигурационных файлов добавьте такой код:
    // CACHE
    define('CACHE_HOSTNAME', '/home/example/.system/memcache/socket');
    define('CACHE_PORT', '0');
    define('CACHE_PREFIX', 'oc_');

    В строке с параметром CACHE_HOSTNAME вместо example укажите название хостинг-аккаунта, в котором размещён сайт.

  2. Отредактируйте файл default.php, расположенный в каталоге system/config:
    • Найдите такой блок кода:

      // Cache
      $_['cache_engine'] = 'file'; // apc, file, mem or memcached
      $_['cache_expire'] = 3600;

    • В строке с параметром cache_engine замените file на memcached, чтобы блок кода принял такой вид:

      // Cache
      $_['cache_engine'] = 'memcached'; // apc, file, mem or memcached
      $_['cache_expire'] = 3600;

  3. Проверьте работу сайта.

Чтобы включить поддержку Memcache в OpenCart 2.2/2.3:

  1. В конце каждого из двух конфигурационных файлов добавьте такой код:
    // CACHE
    define('CACHE_HOSTNAME', 'unix:///home/example/.system/memcache/socket');
    define('CACHE_PORT', '0');
    define('CACHE_PREFIX', 'oc_');

    В строке с параметром CACHE_HOSTNAME вместо example укажите название хостинг-аккаунта, в котором размещён сайт.

  2. Отредактируйте файл default.php, расположенный в каталоге system/config:
    • Найдите такой блок кода:

      // Cache
      $_['cache_type'] = 'file'; // apc, file or mem
      $_['cache_expire'] = 3600;

    • В строке с параметром cache_type замените file на mem, чтобы блок кода принял такой вид:

      // Cache
      $_['cache_type'] = 'mem'; // apc, file or mem
      $_['cache_expire'] = 3600;

  3. Проверьте работу сайта.

Чтобы включить поддержку Memcache в OpenCart 2.0/2.1:

  1. В конце каждого из двух конфигурационных файлов добавьте такой код:
    // CACHE
    define('CACHE_HOSTNAME', 'unix:///home/example/.system/memcache/socket');
    define('CACHE_PORT', '0');
    define('CACHE_PREFIX', 'oc_');

    В строке с параметром CACHE_HOSTNAME вместо example укажите название хостинг-аккаунта, в котором размещён сайт.

  2. Отредактируйте два файла index.php, один из которых находится в корневом каталоге сайта, второй — в подкаталоге admin:
    • Найдите такой блок кода:

      // Cache
      $cache = new Cache('file');
      $registry->set('cache', $cache);

    • В строке с переменной $cache замените file на mem, чтобы блок кода принял такой вид:

      // Cache
      $cache = new Cache('mem');
      $registry->set('cache', $cache);

  3. Проверьте работу сайта.

Чтобы включить поддержку Memcache в OpenCart 1.5:

  1. В конце каждого из двух конфигурационных файлов добавьте такой код:
    define('CACHE_DRIVER', 'memcached');
    define('MEMCACHE_HOSTNAME', 'unix:///home/example/.system/memcache/socket');
    define('MEMCACHE_PORT', '0');
    define('MEMCACHE_NAMESPACE', 'opencart_test');

    В строке с параметром MEMCACHE_HOSTNAME вместо example укажите название хостинг-аккаунта, в котором размещён сайт.

  2. Замените файл system/library/cache.php на этот:

    cache.php
    <?php
    final class Cache {
        private $expire;
        private $memcache;
        private $ismemcache = false;
        public function __construct($exp = 3600) {
            $this->expire = $exp;
            if (CACHE_DRIVER == 'memcached') {
                $mc = new Memcache;
                if ($mc->pconnect(MEMCACHE_HOSTNAME, MEMCACHE_PORT)) {
                    $this->memcache = $mc;
                    $this->ismemcache = true;
                };
            };
            $files = glob(DIR_CACHE . 'cache.*');
            if ($files) {
                foreach ($files as $file) {
                    $time = substr(strrchr($file, '.'), 1);
                    if ($time < time()) {
                        if (file_exists($file)) {
                            @unlink($file);
                        }
                    }
                }
            }
        }
        public function get($key) {
            if ((CACHE_DRIVER == 'memcached') && $this->ismemcache) {
                return($this->memcache->get(MEMCACHE_NAMESPACE . $key, 0));
            } else {
                $files = glob(DIR_CACHE . 'cache.' . $key . '.*');
                if ($files) {
                    foreach ($files as $file) {
                        $cache = '';
                        $handle = fopen($file, 'r');
                        if ($handle) {
                            $cache = fread($handle, filesize($file));
                            fclose($handle);
                        }
                        return unserialize($cache);
                    }
                }
            }
        }
        public function set($key, $value) {
            if ((CACHE_DRIVER == 'memcached') && $this->ismemcache) {
                $this->memcache->set(MEMCACHE_NAMESPACE . $key, $value, 0, $this->expire);
            } else {
                $this->delete($key);
                $file = DIR_CACHE . 'cache.' . $key . '.' . (time() + $this->expire);
                $handle = fopen($file, 'w');
                fwrite($handle, serialize($value));
                fclose($handle);
            };
        }
        public function delete($key) {
            if ((CACHE_DRIVER == 'memcached') && $this->ismemcache) {
                $this->memcache->delete(MEMCACHE_NAMESPACE . $key);
            } else {
                $files = glob(DIR_CACHE . 'cache.' . $key . '.*');
                if ($files) {
                    foreach ($files as $file) {
                        if (file_exists($file)) {
                            @unlink($file);
                            clearstatcache();
                        }
                    }
                }
            }
        }
    }
    ?>

  3. Проверьте работу сайта.

  • hosting/cms/opencart/memcached.txt
  • Последние изменения: 2019/08/29 12:05
  • — karlov