Задать вопрос
@antonowano
Профессиональный самоучка

Как организовать временное хранение картинок?

Здравствуйте.

Пользователи на сайт размещающие объявления, в которые можно вставлять картинки. Картинки загружаются и для каждой создается отдельная запись в БД. Но что, если пользователь передумает размещать объявление и просто закроет браузер, фотография останется и будет лежать на сервере ненужным грузом.

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

Организация БД следующая
Все файлы у меня хранятся в таблице files.
А для картинок объявлений есть еще одна таблица offers_images с полями
offer_id - номер объявления в таблице offers
file_id - номер файла в таблице files
  • Вопрос задан
  • 400 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Всё предельно просто.

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

У Вас есть картинки, которые привязаны (должны быть) к какому-то объявлению, которое создаётся ранее. С помощью CRON'а, вы находите объявления, которые более не ликвидны (недоопубликованы например) и по простой связи находите их картинки и удаляете всё сразу (и объявления и картинки).

Другой вариант: у Вас объявление создаётся позже, чем картинки. То есть, картинки некоторое время, до полного формирования объявления существуют в некоем вакууме. В этом случае, Вы добавляете каждой картинке поле - "дата загрузки" и выбираете все картинки, дата загрузки которых была более суток назад и которые не привязаны ни к одному объявлению (т.е. поле объявление_id == NULL).

Всё это делается по CRON'у, который запускает какой-то метод контроллера (судя по тому, что Вы используете Symfony). Обычно эту задачу решает утилита wget, которую запускает CRON. Что бы предотвратить "случайные" запуски со стороны пользователей - можно добавить проверку по GET-параметру, содержащему какой-нибудь хеш.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@andrushi4
Я бы добавил ещё 2 поля в таблицу:
- флаг использования в объявлении (tinyint);
- дата загрузки (timestamp).
По умолчанию при загрузке картинки значение флага равно нулю. Когда пользователь разместит объявление - единице.
Далее раз в сутки (ночью, наверное) скрипт ищет в БД все записи с флагом = 0 и датой создания более суток. Всё что найдёт - удаляет (как записи в БД, так и файлы).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы