Мне нужен способ удалить «неиспользуемые» изображения из моей файловой системы, то есть изображения, к которым никогда не осуществляется доступ из любой точки моего веб-сайта (не имеет значения, если я нарушу внешние ссылки. Я могу отключить внешние хотлинкинг вообще). Какой лучший способ сделать это? Обычные пользователи могут добавлять несколько вложений к темам / сообщениям, а авторы контента могут загружать большое количество изображений, которые можно использовать в статьях или галереях изображений.
Проблема в том, что на изображения можно ссылаться любым из следующих способов:
- Из пользовательского контента (text / html, возможно Markdown или BBCode), хранящегося в базе данных
- Закодировано в HTML-страницу
- Закодировано в файл PHP
- Закодировано в файл CSS
- В качестве поля «вложения» в таблице базы данных, обычно содержащего только само имя файла без пути, потому что приложение предполагает, что оно будет в определенной папке.
И в довершение всего, путь к изображению может быть абсолютным или относительным путем HTTP или PHP и может быть или не быть построен с конкатенацией строк в PHP.
Так что, очевидно, что найти / заменить или пересмотреть базу данных или файловую систему не может быть и речи. Но, к счастью для нас с вами, эта система еще не полностью реализована, и мне не нужно ничего, что касалось бы существующего запаса изображений. Мне просто нужно создать эффективную структуру, которая позволит это в будущем.
Некоторые идеи, о которых я подумал:
- Перехват HTTP-запроса изображения с помощью PHP и отслеживание HTTP_REFERER. Проблема в том, что если во время проверки никто не нажимал на ссылку, это не означает, что ссылка не существует.
- Использовать экстремальную нормализацию базы данных - то есть создать таблицу для изображений и использовать внешние ключи для всего, что ссылается на нее. Однако это привело бы к созданию метрической основы отношений многих ко многим (и кросс-таблиц) в дополнение к непрактичности для любого обычного пользователя.
- Сделайте резервную копию всех изображений и удалите их, а также проверяйте каждый запрос 404 и каждый раз запускайте сценарий, который пытается найти изображение из резервной папки и помещает его в «настоящую» папку. Проблема заключается в том, что этот кэш придется очищать время от времени, а сервер может быть перегружен при перестройке кеша.
Идеи / предложения? Это просто то, что вы должны игнорировать и жить, даже если вы делаете сайт со смешным количеством изображений? Даже если это того не стоит, как что-то будет работать только для проверки концепции (я добавил тег сборки мусора только потому, что это может войти в эту область концептуально).