Мы используем cookie-файлы
Для оптимизации работы нашего сайта мы используем cookie-файлы. Продолжая использовать сайт, Вы соглашаетесь с использованием cookie-файлов.
Панель управления
  • Русский
  • Українська
  • UAH
  • USD
  • RUB
  • EUR
  • +38(044) 392-74-33  Киев
  • +38(057) 728-39-00  Харьков
  • +38(056) 794-38-31  Днепр
  • +38(032) 229-58-93  Львов
  • +38(048) 738-57-70  Одесса
  • +38(093) 170-15-42  Life
  • +38(067) 400-88-44  Киевстар
  • +38(095) 630-90-82  Vodafone
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

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

Настройка 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. Проверьте работу сайта.