Утилита от @fazer для очистки upload.

+21
3.07K
Вашему вниманию предлагается утилита для очистки папки upload от неиспользуемых изображений.
Написана @fazer на языке PERL. Все благодарности и плюсы в карму сюда: @fazer
Так как @fazer не имеет пока достаточно кармы для своего блога, выкладываю эту разработку по его просьбе в своем блоге.
Благодаря использованию перла, поиск в базе теперь не приводит к падению сервера mysql на больших таблицах.

Утилита представляет из себя файл написанный на перле, который срабатывает по заданию планировщика или вручную из админки.
В настройках компонента можно настроить расширения, которые будут удаляться, поля в базе, в которых будут искаться ссылки на картинки, папки в которых будет производиться поиск ненужных файлов и папки, которые
не участвуют в поиске.
Лишние файлы переносятся в папку /upload/deleted, которую можно очистить потом. Также при работе скрипта создается лог удаляемых файлов cleaner_files.txt в папке upload.

По просьбе @fazer я прикрутил к его скрипту настройки и оформил всё это в виде компонента для установки.
После установки компонента нужно перейти в Панель управления — Компоненты — Очистка upload и настроить компонент.
Иллюстрация
После этого нужно перейти в Настройки — Планировщик и настроить время запуска задания планировщика "Очистка upload".
Иллюстрация
Если хочется сразу проверить работоспособность компонента — можно запустить это задание вручную.

ВНИМАНИЕ!

Если Вы не знаете, что настраивать в компоненте — просьба не скачивать и не устанавливать этот компонент, он Вам не нужен.
Работает только под линуксом, на опенсервере не хватает библиотек.
Для работы компонента требуется установленные на сервере библиотеки perl
libdbi libdbd-mysql DB_File
устанавливаются в зависимости от оп.системы хостинга
yum install perl-DBI perl-DBD-MySQL perl-DB_File
или
apt-get install libdbi-perl libdbd-mysql-perl
Мне помогло под вестой вот это:
yum install perl-DB_File

Скачать компонент "Очистка upload"

Свежая версия

+1
Андрей Андрей 4 года назад #
Добрый день Ris - правильно понимаю, что это взамен Компонента "Поиск неиспользуемых изображений" http://joxi.ru/DmBwKb5uJG6vl2
Если да, то как корректно удалить его, чтобы поставить новый? Спасибо.
+2
Ris Ris 4 года назад #
Оно не мешает.
Если не знаете как удалить - просто не трогайте.
+1
Андрей Андрей 4 года назад #
Я понял, спасибо. Да, и "Поиск неиспользуемых изображений" еще папки пустые удаляет.
+2
Ris Ris 4 года назад #
И эта утилита тоже удаляет.
+1
Андрей Андрей 4 года назад #
Круто! smile
+1
sindoyun sindoyun 4 года назад #
При включенном компоненте, сайт не работает(белый экран)!
+1
Ris Ris 4 года назад #
А не сможете включить отладку и посмотреть, что за ошибка?
+2
Artamos Artamos 4 года назад #
Проблема аналогичная - белый экран, вот ошибка:
Notice: Undefined offset: 0 in /var/www/user/data/www/site.ru/system/controllers/content/widgets/list/widget.php on line 108
Notice: Undefined offset: 1 in /var/www/user/data/www/site.ru/system/controllers/content/widgets/list/widget.php on line 108
Fatal error: Uncaught Error: Call to a member function limit() on null in /var/www/user/data/www/site.ru/system/controllers/content/widgets/list/widget.php:112 Stack trace: #0 /var/www/user/data/www/site.ru/system/core/core.php(906): widgetContentList->run() #1 /var/www/user/data/www/site.ru/system/core/core.php(867): cmsCore->runWidget(Array) #2 /var/www/user/data/www/site.ru/index.php(49): cmsCore->runWidgets() #3 {main} thrown in /var/www/user/data/www/site.ru/system/controllers/content/widgets/list/widget.php on line 112

При отключении компонента сайт работает нормально.

Еще бы при проверке статистику на почту или в лс отправлял, какие файлы и папки удалены, а то непонятно, делает что-то или нет.
+1
fazer fazer 4 года назад #
Artamos:
Еще бы при проверке статистику на почту или в лс отправлял, какие файлы и папки удалены, а то непонятно, делает что-то или нет
К сожалению - это вряд ли, проблема в том что на больших базах cron не дождется(несколько минут) окончания работы очистителя.
Вы можете создать другое задание cron которое(например через час после очистителя) отправит вам на почту логи:
cleaner_dirs.txt, cleaner_errors.txt, cleaner_files.txt... ну или смотрите их непосредственно на сайте
http://www.site.ru/upload/cleaner_files.txt
+1
Ris Ris 4 года назад #
Да, моя недоработка.
Исправил, файл перезалил.
Просто скачайте еще раз и установите заново.
+1
Ris Ris 4 года назад #
Перезалил компонент.
Кто не хочет устанавливать заново - удалите файл /system/controllers/cleaner/manifest.php и обновите события в админке.
+2
vikont vikont 4 года назад #
Круто! А звучит то как "Утилита для очистки upload от @fazer."!
А можно вместо @fazer от кого то другого очищать папку upload?
Хотя тоже вопрос:"А что @fazer делает в папке...?" rofl

ПС.:Это конечно шутка. Компонент очень нужен и такими темпами его развития, скоро очутится в коробке! Где ему и место! Не хватает только защиты от дурака.
+1
Ris Ris 4 года назад #
Исправил.
+1
fazer fazer 4 года назад #
скоро очутится в коробке
это тоже - вряд ли, разработчики не пойдут на усложнения из-за установки дополнительных не нативных для cms модулей )
защиты от дурака
некое подобие это testmode=on по умолчанию...
какой бы вы могли предложить доп алгоритм от криворуких ? :)
+2
RSN RSN 4 года назад #
Пока некогда потестить, но однозначно Молодцы! Спасибо!
Похоже все таки можно будет довести процедуру очистки до "без танцев с бубном".)
+1
noname noname 4 года назад #
По поводу сортировки файлов в upload еще не придумали что-нибудь ?
+1
vikont vikont 4 года назад #
А что тут можно придумать? Либо файлы сортируются изначально (следуя заложенной структуре) либо никак.
+2
Ris Ris 4 года назад #
Есть еще одна мысль (и я её думаю), что можно вместе со ссылкой на картинку получать из базы user_id.
Тогда резко сужается поиск возможного нахождения файла картинки.
Логическая цепочка такая:
Неиспользуемые файлы образуются двумя способами:
1. Добавление картинки без добавления ссылки в базу.
2. Изменение контента без корректного удаления изображений.
Отсюда мораль: если ссылка на картинку сопоставлена с user_id = 304, значит сама картинка должна лежать в папке /upload/003/u304/ и именно там её и следует искать, а не шариться по всему upload.
+1
fazer fazer 4 года назад #
Тогда резко сужается поиск возможного нахождения файла картинки.
И это - вряд ли smile (что то я тут тока обламываю всех, прям как "fazer из upload" :)))
в базе если есть упоминание картинки то поиск по id user уже ни к чему, мы не ищем в аплоад по ссылкам, мы сравниваем имена катринок с наличием имени в базе...,
опять же, аплоад рекурсивно проходится - дольше выяснять чья это картинка чем сравнить её имя с наличием его(имени) в базе
+1
SALIK SALIK 4 года назад #
У меня БД 2 гб, файлов примерно 600 тыс. - 700 тыс. Будет ли перегруз при запуске вашей утилиты и примерно как долго она будет искать?
+2
Ris Ris 4 года назад #
У меня база гиг. Практически всё в cms_comments. Файлов 3 гига.
Никто не затыкается и дорабатывает до конца.
Если при ручном запуске апач выдает ошибку - просто подождите минут 10. Оно работает в фоне.
+1
SALIK SALIK 4 года назад #
Спасибо за инфу ;)
+1
SALIK SALIK 4 года назад #
А вес у меня гигов 50..)) Ну ладно поэкспериментирую))
+2
Ris Ris 4 года назад #
50 гигов аплоуда или 50 гигов бызы?
В любом случае, помолимся за успех предприятия!
0
ermakover ermakover 4 года назад #
Ссылка на свежую версию не работает. Я так понимаю надо по первой ссылке качать?
Кто-нибудь пробовал чистить upload ? Каковы результаты?
+1
Ris Ris 4 года назад #
Здесь посмотрите:
/users/9500/files.html
0
ermakover ermakover 4 года назад #
Решился я всё-таки попробовать дополнение в деле. У меня сайт просто распух до безобразных 30 Гб. Запустил утилиту и практически в половину уменьшился размер сайта!
Правда, удалились аватары, но это потому, что они у меня в папке upload/avatars потому, что для аватаров используется поле с обрезкой.
И ещё заметил, что удаляются картинки в виджетах. У меня так ссылки на группы св соцсетях реализованы. Но я их в корень сайта закинул, чтобы больше не удалялись.
Пока больше не нашёл "криминальных" удалений.
А посему - огромное спасибо Ris и @fazer
0
ermakover ermakover 4 года назад #
В компоненте Video сносит напрочь обложки категорий.
0
Ris Ris 4 года назад #
Если Вы не отметили галкой полное удаление - все можно вернуть из папки deleted.
Ни fazer ни я не владеем компонентом видео.
0
ermakover ermakover 4 года назад #
Ris, компонент "Видео" абсолютно беспонтовый, если не делать его как самостоятельную единицу с загрузкой файлов, а не со ссылками на ютуб. Ни Яндекс, ни Google выдавать в поиске не хотят. Индексируют - да. Но продвигают свои видео сервисы. Так что вы с fazer ничего не потеряли.

И для меня эти обложки такая ерунда по сравнению с остатками картинок от удалённых объявлений, которых набралось 14 ГБ.
0
ermakover ermakover 4 года назад #
К сожалению, радость была не долгой.
У меня есть тип контента "Собаки" и там поля изображений - сама собака, и два поля изображений - папа и мама собаки.
Утилита снесла напрочь все поля, хотя имена у них не совпадают с теми, что в настройках утилиты.
Причём, все эти файлы картинок распихались по разным папкам, искать и восстанавливать - это не вариант.
Вот такие дела.
То есть, я так понимаю, что утилита видит не известные ей поля изображений и из них убирает всё.
А вот в питомниках, в объявлениях, в статьях всё ОК.
0
Ris Ris 4 года назад #
Назначайте корневой папкой не 000, а /
0
ermakover ermakover 4 года назад #
Не помогло, удалились мои собачки и их предки.
0
Ris Ris 4 года назад #
Они не удалились. Они в папке upload/deleted. Поищите там.
0
ermakover ermakover 4 года назад #
Неверно сформулировал. Они всё равно удаляются в deleted при чистке. Может быть стоит "допилить" утилиту, чтобы поля-исключения можно было добавить. Вот на другом моём сайте, где нет замудрённости и только объявления всё почистилось корректно.
0
Pawell Pawell 8 месяцев назад #

Здравствуйте. На 2.16.0 запустил компонент: «Задача очистка папки upload выполнена». Но никакого результата не получил. Вес папки upload не изменился. Я так понял файл /upload/cleaner_files.txt и папка deleted должны были сами создасться? Но их нет. Работает ли компонент на крайней версии системы?

0
Викторыч Викторыч 2 месяца назад #

Ris, аналогичный вопрос, только для версии 2.16.2 — работоспособен ли компонент? На Openserver проверить же не получится. 

0
DeeMon DeeMon 2 месяца назад #

Поставить дубликат на субдомен, с дублем БД, там тестить

0
Викторыч Викторыч 2 месяца назад #

Дык нет уже места, чтобы дубли ставить. Потому и хочется от соавтора утилиты хотя бы подтверждение услышать, как в каталоге — «Совместимо с версией ...» )

0
DeeMon DeeMon 2 месяца назад #

Ого раскрутился :-)

0
Викторыч Викторыч 2 месяца назад #

Да не так что бы. Но народ наш в картинках удержу не знает, поэтому проблема скоро встанет в полный рост. ) Эта утилита позволит сэкономить немало времени, перед тем как переходить на более дорогой тариф. Лишь бы работала… вот это я и хочу узнать. )

+1
Ris Ris 2 месяца назад #

У меня где-то валяется то, что работает и на опенсервере.

Найду — выложу.

Нашел.

instantcms.ru/blogs/lunyi-blog/chistilshik-dlja-dvoiki.html#comment_120209

0
Викторыч Викторыч 2 месяца назад #

Хорошо, когда выбор есть! ) Я по обеим утилитам почитал внимательно, а по чистильщику от Фазера спрашивал, потому что он меньшую нагрузку на сервер дает… Впрочем, с моей БД, думаю, оба справятся быстро, она еще не очень большая. Спасибо! )

Еще от автора

Сверхлёгкий webserver на Alpine linux
Не знаю, как нормальных людей, но меня всё время мучает вопрос, зачем для размещения небольшого сайта на виртуальном сервере я вынужден устанавливать
Накрутка рейтинга и кармы пользователям, контенту и фото.
По многочисленным просьбам изготовил новый инструмент для изменения администратором сайта рейтинга и кармы пользователей.
Авторизация по любым полям из профиля и по API
Представляю уважаемому сообществу небольшое дополнение для доработки авторизации вашего сайта, а также для интеграции двух сайтов на Instantcms друг с
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.