[AVP] Дополнение для Детектора изменений ядра

В продолжение старой темы, и так как понемногу выношу правки в модули

Процесс, изложенный в теме, вынес в модуль. У модуля нет настроек. При заходе на страницу или запуске по кнопке Детектора изменений ядра - в корне магазина создается файл changes_files.zip. В итоге имеем нормальный список файлов с изменениями и ссылку на скачивание архива с этими файлами

image

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

Архив с модулем: avp_adv_tools_view_chng.zip (6,6 КБ)

Шаблон view_changes.tpl пришлось полностью перезаписать (override), но я сравнил по версиям - никаких изменений в нем не было, и видимо, не предвидится. Поэтому модуль будет работать на всех версиях.

14 лайков

Еще бы сам cs-cart нормально определял измененные файлы, так как зачастую отмечает не те файлы.
Но работа хорошая, еще бы такие архивы создавались автоматом при обновлении модулей или ядра, но пока не сделает кто-то так и будет.

3 лайка

Подозреваю, что наличие различий определяется по checksum для каждого файла, хранятся контрольные суммы всех файлов ядра, и сравниваются с текущим состоянием. Полагаю, что также идёт и с контрольными суммами структур таблиц БД. В файле достаточно добавить пробел, а иногда (редко) и просто пересохранить, и контрольная сумма изменится. А вот над внедрением в процесс установки или обновления - покопаю ещё, возможно ли сделать это достаточно безболезненно, так как тоже были такие мысли. Но тут скорее нужен другой подход, так как нужна разница снимков файловой системы до и после установки (аналогично для БД).

помнится в старой системе обновления можно был файлы сравнивать, зачем это вырезали =/

Дерево без веток)) все в один уровень
Ну или может так и надо.
Все равно за модуль огромное спасибо!

Кстати, а можно как то сделать, чтобы он видел и изменнения сделанные в файлах сторонних модулей?

Используется стандартный функционал. То есть вместе с ядром проставляется снимок ядра - контрольные суммы всех файлов ядра, по которым происходит сравнение текущих файлов с исходными состоянием. Для сторонних модулей такого нет. Мой модуль лишь представляет результат в более удобном виде для понимания, и формирует массив из изменённых файлов. Так что не получится, к сожалению.

1 лайк

Для таких случаев имхо лучше использовать git (отследить изменения сможете и в ядре и в сторонних модулях).
С Bitbucket https://www.atlassian.com/ru/software/bitbucket все наглядно будет.

ВАЖНО!
КТО УСТАНАВЛИВАЛ СЕБЕ МОДУЛЬ - ОБНОВИТЕ!

avp_adv_tools_view_chng_1-5-0_20230523_122504.zip (5,7 КБ)

Для обновления - удалите старую версию через Модули - Управление модулями, Затем переустановите новую через Шестеренка - Ручная установка (или распакуйте архив в корень сайта и установите модуль через кнопку Установить).

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

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

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

5 лайков

Даже не знаю, нужно мне ли это установить? честно говоря не знаю для чего :see_no_evil:
С 4.16.2 совместим ведь? Смело ставлю? ))

Это пригодится тому, у кого много своих изменений в файлах ядра. Сейчас при обновлении Центр обновлений просто выдает список файлов, которые возможно претерпели изменения. Почему-то там список не всегда соответствуют действительности, то есть сильно, очень сильно расширен… Здесь, как я уже писал, довольно просто (если линукс система - особенно) подключить папку с сайтом на сервере в локальную файловую, открыть в double commander, проходясь параллельно по папкам из этого архива - сравнивать файлы по содержимому встроенным редактором - элементарно очень быстро перенести свои изменения и сохранить. У меня 25 измененных файлов и раньше эта процедура занимала от 2 часов минимум, плюс обязательная бумажка на которой записаны все мои изменения. Сейчас - максимум полчаса, включая сам процесс бэкапов и установки, кофепития и перекура.

1 лайк

У нас тоже не мало изменений, установлю тогда сейчас тоже, думаю пригодится ВАМ :see_no_evil: :sweat_smile:

Круто помогает понять где произвелись изменения. Разработчикам самое то

1 лайк

@alex_vp Тут вы в контроллере комментарий не раскомментировали из за этого выдает ошибку
34-36 строки

Что за ошибка? Эти строчки в принципе не нужны, так как нотификация в этом случае особой роли не играет.

PS перезалил архив без этих комментариев

Хм до моего раскомментирования она выдавала ошибку о не закрытой скобке. Сейчас уже не выдает ошибку.

А вот еще после установки
Warning : unlink(D:/OSPanel/domains/cscart/var/files/.zip): No such file or directory in D:\OSPanel\domains\cscart\app\addons\avp_adv_tools_view_chng\controllers\backend\tools.post.php on line 29

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

Перезалил с правкой

версия php - 8?

1 лайк

Да проверил на локалке там 8.0

Проверил - ошибка скорее всего вылезла именно после РАСКОММЕНТИРОВАНИЯ? Когда комментарий ставил - случайно затер скобку }, но в итоге затер я ее именно в комментарии, поэтому вы раскомментировали - ошибка и появилась.