Как правильно организовать хранение прикрепленных файлов?
Есть CKEditor + Elfinder, допустим пользователь при отправке сообщения, может прикрепить файлы и фото. Как лучше организовать хранение этих файлов? Нужна возможность ограничить общий размер загружаемых файлов, удалять эти файлы при удалении сообщения.
Записывать информацию о файлах в базу. И все действия с файлами осуществлять в зависимости от данных в базе.
Например, пользователь загрузил файл, в базу записывается имя, размер, путь физического расположения, связь с записью и т.п., ставится отметка «временный». Когда пользователь отправляет сообщение, отметка «временный» снимается. Для связи с записью можно сгенерировать что-нибудь типа GUID. Т.е. пользователь заходит на страницу добавления сообщения. В hidden-поле должен быть уникальный GUID потенциальной записи. При загрузке файлов, GUID используется для сохранения связи с записью.
Если пользователь удаляет добавленное ранее сообщение, то связанным файлам можно поставить отметку «удален».
Сделать робота, который будет физически удалять временные файлы и файлы помеченные, как удаленные. Ну и из базы тоже. Хотя в базе можно информацию оставлять, для статистики.
Робот может работать раз в сутки. Для временных файлов можно смотреть по дате добавления файла, если файл был добавлен больше 24 часов назад, то можно его удалять. Ну а удаленные, просто удалять, без дополнительных проверок.
Если привязывать загружаемые файлы к пользователям, то можно и размер ограничивать без проблем.
Если пользователь не зарегистрирован на сайте, то можно в куку писать, опять же, GUID и у себя в базе смотреть, сколько этому GUID можно загружать файлов. Но с зарегистрированными пользователями надежней, особенно если есть механизмы подтверждения email и/или телефона.