Відгуки користувачів
OcBox Cache File Optimized — швидкий і безпечний файловий кеш для OpenCart 2.3/3.0 (PHP 8 fix)
Стандартний файловий кеш OpenCart 2.3/3.0 написаний з декількома проблемами які проявляються на живих магазинах: glob() на 10 000+ файлах гальмує сторінку, паралельні записи в кеш ламають JSON, а на PHP 8 ще й періодично падають з warning-ами. Якщо ви тримаєте кеш на файловій системі (FILE driver) — то будь-який пік трафіку йде через ці граблі.
OcBox Cache File Optimized — це OCMOD-патч для system/library/cache/file.php який заміняє «наївну» реалізацію на промислову: атомарний запис, shared-locks на читання, garbage collection через DirectoryIterator замість glob(), захист від битого JSON, повна сумісність з PHP 5.6 — 8.3.
Головна ідея — зробити стандартний файловий кеш OpenCart 2.3/3.0 нормальним інструментом, а не міною уповільненої дії. Не міняємо driver, не ставимо Redis/Memcached. Беремо те що вже є (FILE) і виправляємо очевидні помилки: відсутність атомарних записів, повільний glob(), брак валідації JSON, відсутність probabilistic GC. На каталозі 5000+ товарів і 30+ модулях кеш починає працювати помітно швидше і перестає періодично «псуватись».
Що ви отримуєте
✓ Атомарний запис кешу (write-then-rename)
Замість прямого fopen($file, 'w') модуль пише дані у тимчасовий файл і робить rename() у фінальне ім'я. POSIX гарантує що rename — атомарна операція. Інші процеси або бачать старий валідний файл, або новий валідний — ніколи не бачать «недописаний» наполовину.
⚠ Без цього: на високому трафіку два паралельних запити пишуть в один файл — отримуєте битий JSON, який потім кидає errors на читанні. Перші відвідувачі дістають білий екран.
✓ Shared lock на читання, exclusive lock на запис
Читання беруть flock(LOCK_SH) — багато читачів паралельно. Запис бере LOCK_EX. Між ними: read-while-write безпечний, не отримуєте half-written data.
⚠ Без цього: під навантаженням файл-кеш повертає frankenstein'ів — частину старих, частину нових даних. Дебаг такого — суцільне страждання.
✓ Probabilistic garbage collection (5%)
Кожен 20-й запит з імовірністю 5% запускає прибирання просрочених кеш-файлів через DirectoryIterator. Не блокує синхронно кожен запит, не залишає каталог переповненим.
⚠ Без цього: каталог system/storage/cache/ розростається до сотень тисяч файлів, перший же бекап мрієте видаляти години.
✓ DirectoryIterator замість glob()
glob(DIR_CACHE . 'cache.*') повертає масив всіх файлів — на 100k+ кешів використовує мегабайти RAM і займає секунди. Ми використовуємо DirectoryIterator який ітерує по одному файлу — економимо RAM і час.
⚠ Без цього: на гарячих сторінках кеш-операція забирає 200-500мс через glob(). Власник магазину дивується чому сайт «гальмує без причин».
✓ Валідація JSON при читанні і записі
Перед json_encode($value) перевіряємо json_last_error(). На читанні — те саме. Якщо JSON битий — файл автоматично видаляється і повертається false (як при cache miss).
⚠ Без цього: один битий кеш-файл видає json_decode warning-и в логах годинами і ламає сторінку де він використовується.
✓ Auto-deletion корумпованих файлів
Якщо при читанні виявлено: 0-байтний файл, прострочений TTL, неправильний JSON — файл одразу видаляється (@unlink). Наступний рендер генерує свіжий кеш.
⚠ Без цього: битий файл лежить у кеші доти поки не закінчиться TTL — годинами видає warnings.
✓ Sanitization кеш-ключа
Метод sanitizeKey() прибирає всі символи окрім A-Z, 0-9, крапки, дефіса, підкреслення. Інакше — будь-який неконтрольований ключ може спробувати зламати path traversal через ../.
⚠ Без цього: на деяких модулях ключ кешу береться з URL — теоретично уразливість для path traversal.
✓ Сумісність з PHP 5.6 — 8.3
Код переписаний без deprecated-конструкцій. Працює на старих PHP 5.6 і нових 8.3. Окремий fix для PHP 8 де стандартний кеш видавав попередження.
⚠ Без цього: при оновленні PHP 7.x → 8.x на OC 2.3 кеш починає видавати warning-и про застарілі функції.
✓ Без ionCube, без ліцензії, без активації
Чистий OCMOD з PHP-операціями. Нічого не закодовано. Поклали XML у system/, натиснули Refresh — працює.
⚠ Без цього: купуєте платний модуль за фікс який має бути в OpenCart за замовчуванням.
✓ Безпечне видалення
Не подобається — видаляєте oc_box_cache_file_optimized.ocmod.xml з system/, натискаєте Refresh — повертається стандартний file.php. Жодних хвостів у БД.
⚠ Без цього: інші модулі залишають хвости після видалення.
Перед встановленням: очистіть кеш через Розширення → Модифікації → Clear + видаліть вміст system/storage/cache/ — щоб старі несумісні з новим форматом файли не плутались. Після Refresh modifications кеш буде регенеруватися автоматично з нового коду.
Встановлення
- Завантажте ZIP з форуму
-
Розпакуйте — отримаєте папку
upload/ -
Завантажте вміст у корінь магазину через FTP (один файл —
system/oc_box_cache_file_optimized.ocmod.xml) - В адмінці: Розширення → Модифікації → Refresh
-
Очистіть
system/storage/cache/через FTP - Готово — кеш працює з новою логікою
Сумісність
- OpenCart 2.3 / 3.0 та ocStore 2.3 / 3.0
- PHP 5.6, 7.x, 8.0, 8.1, 8.2, 8.3
-
Cache driver =
file(стандартний) — інші драйвери (apc, memcache) не зачіпає - Без ionCube Loader, без ліцензії
- Чистий OCMOD — без правок ядра і шаблону
Рекомендовані платні модулі OcBox
![]() Smart Related $30 — пов’язані товари |
SEO FAQ AI $30 — AI FAQ + Schema.org |
AI Chat $100 — AI чат-консультант |
AI Product Editor $40 — масове редагування |
![]() Image Pro $15 — WebP, водяний знак (beta) |
Ми рекомендуємо шаблони від 29aleksey
Найкраще працює зі швидкими шаблонами. 29aleksey робить топові шаблони для OpenCart 2.3/3.0 з акцентом на швидкість і оптимізацію з коробки:
![]() Prime |
![]() UpStore |
![]() CyberStore |
![]() Chameleon |
![]() LuxShop |
![]() NewStore |
Характеристики
-
Зараз на сторінці 0 користувачів
- Ні користувачів, які переглядиють цю сторінку







