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

Recommended Posts

Третьего дня столкнулся с непонятным:
при удалении обычного дополнения через установщик и загрузке его обновленной версии на боевой сайт - ряд других дополнений превращались в "кирпич", а движок начинал ругаться на отсутствие части файлов, связанных с ними.

 

Вариант с "кривым" дополнением был отброшен изначально, т.к.
а) собственно и являюсь автором дополнения

б) создано согласно стандартам движка и не в первый раз; структурно не отличается от других
в) перед загрузкой прошло полную обкатку на тестовом окружении

 

В процессе препарации выяснилось, что виновник - штатный деинсталлятор дополнений в Opencart 3x

 

При установке любого дополнения в тройке - информация о содержащихся в нем файлах и папках записывается в смежные таблицы oc_extension_install и oc_extension_path

И при удалении через штатный деинсталлятор - относящиеся к дополнению файлы и папки удаляются именно на основе этих данных


При создании дополнений многие авторы используют отдельные папки, общие для файлов своих дополнений (например для своих библиотек в system/library, скриптов в catalog/view/javascript и тд)

или используют универсальные файлы, содержащиеся в каждом их дополнении

 

Беда в том, что в процессе удаления совершенно не учитывается возможность использования этих файлов и папок другими дополнениями.


Фактически:
1. Если ряд дополнений использует свою собственную общую папку, которой нет в движке по умолчанию - такая папка создается при установке первого дополнения и привязывается к нему в таблице oc_extension_path в момент создания.
При этом, при установке последующих дополнений, использующих данную папку - привязки не происходит, так как папка уже есть

Но при удалении именно того дополнения, к которому произошла привязка папки - ПАПКА БУДЕТ УДАЛЕНА СО ВСЕМ СОДЕРЖИМЫМ БЕЗ КАКОЙ-ЛИБО ПРОВЕРКИ

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

 

2. Если в ряде дополнений используются какие-либо общие файлы (например универсальные вспомогательные классы, библиотеки и тд) - удаление такого дополнения через деинсталлятор приведет к удалению этих общих файлов

Ладно, если пользователь переустанавливает или ставит новую версию дополнения, содержащую эти же файлы - тогда они просто будут добавлены заново.
В случае же, если дополнение просто удаляется за ненадобностью или в его новой версии уже нет таких файлов - их отсутствие просто приведет к неработоспособности всех использующих их модулей.

 

На текущий момент данная проблема актуальна для всех движков третьей ветки (3000-3031) и сборок на их основе (включая ocStore 3020)

И судя по исходникам на гите - еще и для беты 3100 (хотя в ней и добавили проверку перед удалением папки, но проверки на уникальность самих файлов по-прежнему нет)

 

лекарство здесь

 

  • +1 2
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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