Flight404
@Flight404
начинающий PHP - программист

Как реализовать удаление не используемых изображений с сервера на laravel?

Подскажите, пожалуйста, как реализовать удаление неиспользуемых изображений с сервера? Проект написан наlaravel 5.7. Картинки загружены с помощью редактора tinymce и располагаются в каталоге public/img, путь же хранится в БД. Таблица news в поле text. Т.к. необходимо было слелать возможность встраивать изображения в текс новости. Соответственно после удаления новости или же после ее изменения или если изображение было загружено по ошибке, то все они остаются на сервере. Какой есть способ удалить все не используемые изображения на сайте например по нажатию кнопки?
  • Вопрос задан
  • 451 просмотр
Пригласить эксперта
Ответы на вопрос 4
@Barmunk
Сейчас остается только проверять текст каждой статьи на вхождение name.jpg. Составить полную карту всех загруженных изображений, привязанных к конкретной статье, а лишнее удалить. В дальнейшем при загрузке новой картинки и сохранении статьи дополнять эту табличку связей
Ответ написан
Комментировать
summoner2015
@summoner2015
Backend всему голова
Можно реализовать скрипт, который будет запускаться по cron и сверять содержимое DB-таблицы с файлами из папки img, и удалять файлы, ссылок на которых нет в DB.

Как вариант рассмотреть событийную модель laravel, мне кажется там можно сделать обработчик события удаления сущности, который и будет удалять связанные файлы. Но тут есть возможность того что один и тот же файл используется в 2 сущностях, и тогда в той что останется в DB будут битые ссылки на файлы.
Ответ написан
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Вопрос - зачем? У вас место жмёт?
Ответ написан
@AlexndrNovikov
Solution Architect in Spiral Scout
Так можно просто пробегаться по файловой системе рекурсивно по папкам со статикой, и сверять файлы у которых atime == mtime
(access time == create/modify time)
Либо просто atime подозрительно старый
Стратегии определения что значит "старый" уже на ваше усмотрение.
При этом можно не просто удалять, а архивировать в какое-то дешевое хранилище (хоть на ленты в конце концов) + мониторить в логах веб сервера 404 ошибки, вдруг удалили что-то не то, и в этом случае возвращать файл на место
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы