Jump to content
SergeTkach

А у Вас был такой баг с кешем в OpenCart?

Recommended Posts

Допустим, есть файл cache.sticker.bestseller.1560966030, который создал модуль из комплектации шаблона.

И в другом модуле стикеров, идет запрос кеша через

$sticker_cache = $this->cache->get('sticker');

В итоге, данные из файла cache.sticker.bestseller.1560966030 оказываются в переменной $sticker_cache...

А вот так все ок

$sticker_cache = $this->cache->get('prefix_sticker');

Ситуация наблюдается в OpenCart 2.1.0.2 - в других, еще не пробовал. Если что - опишусь.

Share this post


Link to post
Share on other sites

$files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');

 

Share this post


Link to post
Share on other sites
5 минут назад, spectre сказал:

$files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');

 

 

$files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', 'sticker') . '.*');

Выдает вот так, за исключением, конечно, многоточия вместо имени сайта : ))

----------------------------------------------------------------------
$files

Array
(
    [0] => /home/users/.../www/system/storage/cache/cache.sticker.bestseller.1560966491
)

Share this post


Link to post
Share on other sites

можно ж открыть файл в котором get и set и все ясно станет

да, коряво, но шо маемо то маемо

Share this post


Link to post
Share on other sites

Лично я решил вопрос префиксом :)

Но решил засветить тему, может кому-то пригодится :)

Share this post


Link to post
Share on other sites

Хотя, таки проверил и новую версию - /var/www/sites/oc-store-3020.loc/public_html/system/library/cache/file.php

Там код такой же:

$files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');

Подозреваю, что основная проблемка в выделенной части: $files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');

То есть выходит поиск ведется по шаблону: cache.sticker.*

То стало быть, если мы используем ключи вида sticker.bestseller (Общее.Конкретизация) разделенные через точку, а кто-то использует ключ, состоящий только из первой части нашего ключа, то баг неизбежен. Хотя, часто встречается product.viewed, багов нет, потому что product слишком обширен и неконкретен, чтобы использовать его без конкретизации. Но вот sticker вполне может хранить все настройки 10-ка стикеров, существующих в настройках модуля.

 

Это, наверно, стоило бы учитывать разработчикам шаблонов.

 

То есть, лучше использовать upper_case при назывании ключей для кеша, чем разделение слов точкой.

Share this post


Link to post
Share on other sites

в Opencart метод кеширования очень далек от идеальности.

во первых, в самом коде используется регулярка, а это уже тормоз.

во вторых - зачем искать все файлы с использованием glob.

в третьих - выдает ошибку при пустом массиве.

в четвертых - если папка cache имеет большой объем, то может выдавать ошибку при ее сканировании.

 

Чтоб не наступать на вышеперечисленные грабли и не только, я для своих модулей создал и использую свой метод кеширования, и в свою папку.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By z0nt1k00
      Добрый день ребята ) 
      кто нибудь подключал redis к окстори ? 
      если у кого есть инструкция скиньте плиз )
      интересует хранение сессии и хранение кеша в редисе
    • By p0v1n0m
      Модуль поможет очистить кэш и логи одним кликом, находясь на любой странице админки.
       
      Установка:
      1. Загрузить скачанный архив для своей версии движка через Установщик дополнений.
      2. Очистить и Обновить кэш в Менеджере дополнений.
      3. Установить и включить модуль.
    • By p0v1n0m
      Скачать/Купить дополнение


      Чистильщик кэша и логов
      Модуль поможет очистить кэш и логи одним кликом, находясь на любой странице админки.
       
      Установка:
      1. Загрузить скачанный архив для своей версии движка через Установщик дополнений.
      2. Очистить и Обновить кэш в Менеджере дополнений.
      3. Установить и включить модуль.
      Добавил p0v1n0m Добавлено 15.08.2016 Категория Кэширование, сжатие, ускорение Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1 Обращение к серверу разработчика  
    • By Verwolf
      350.00 руб
      Скачать/Купить дополнение


      Auto Cache Cleaner (ACCleaner) OC 3
      Простой модуль, позволяющий автоматизировать процесс очистки кэша сайта.
       
      Позволяет освободить дисковое пространство на хостинге за счёт удаления закэшированных данных модулей и расширений, которые не используются.
       
      Очистка кэша запускается автоматически при следующих действиях в админке:
      отключение модификации; удаление модификации; удаление какого-либо расширения (из любой категории).  
      Также данный модуль способствует увеличению производительности сайта в целом и уменьшает время ответа сервера за счёт уменьшения запросов к не используемым файлам кэша.
       
      Производит очистку:
      системного кэша OpenCart; кэша изображений.  
      Более подробно о назначении каждого Вы можете прочитать по ссылке - http://cccp-blog.com/opencart/kak-v-opencart-ochistit-kehsh
       
      Очистка кэша запускается при каждом удалении расширеания и модификации через админку. Также после установки доступна возможность очистки кэша вручную, не дожидаясь удаления модулей, с помощью кнопки Clear Cache в боковом меню панели администратора в меню System.
       
      При установке пользуйтесь инструкцией, описанной в файле readme.txt (в архиве). Также в инструкции подробно рассмотрен процесс удаления модуля с сайта.
       
      Версия для OpenCart 1.5 - https://opencartforum.com/files/file/3049-auto-cache-cleaner-accleaner-oc-15/
      Версия для OpenCart 2 - https://opencartforum.com/files/file/6937-auto-cache-cleaner-accleaner-oc-2/
       
       
      Добавил Verwolf Добавлено 28.03.2019 Категория Кэширование, сжатие, ускорение Системные требования Сайт разработчика http://cccp-blog.com Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0 ocStore 3.0 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет  
    • By Verwolf
      Простой модуль, позволяющий автоматизировать процесс очистки кэша сайта.
       
      Позволяет освободить дисковое пространство на хостинге за счёт удаления закэшированных данных модулей и расширений, которые не используются.
       
      Очистка кэша запускается автоматически при следующих действиях в админке:
      отключение модификации; удаление модификации; удаление какого-либо расширения (из любой категории).  
      Также данный модуль способствует увеличению производительности сайта в целом и уменьшает время ответа сервера за счёт уменьшения запросов к не используемым файлам кэша.
       
      Производит очистку:
      системного кэша OpenCart; кэша изображений.  
      Более подробно о назначении каждого Вы можете прочитать по ссылке - http://cccp-blog.com/opencart/kak-v-opencart-ochistit-kehsh
       
      Очистка кэша запускается при каждом удалении расширеания и модификации через админку. Также после установки доступна возможность очистки кэша вручную, не дожидаясь удаления модулей, с помощью кнопки Clear Cache в боковом меню панели администратора в меню System.
       
      При установке пользуйтесь инструкцией, описанной в файле readme.txt (в архиве). Также в инструкции подробно рассмотрен процесс удаления модуля с сайта.
       
      Версия для OpenCart 1.5 - https://opencartforum.com/files/file/3049-auto-cache-cleaner-accleaner-oc-15/
      Версия для OpenCart 2 - https://opencartforum.com/files/file/6937-auto-cache-cleaner-accleaner-oc-2/
       
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.