Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

А у Вас был такой баг с кешем в 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 - в других, еще не пробовал. Если что - опишусь.

Надіслати
Поділитися на інших сайтах

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
)
Надіслати
Поділитися на інших сайтах

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

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

Надіслати
Поділитися на інших сайтах

Хотя, таки проверил и новую версию - /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 при назывании ключей для кеша, чем разделение слов точкой.

Надіслати
Поділитися на інших сайтах

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

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

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

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

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

 

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.