там достаточно настроек.
Как правильно использовать behavior?
Re: Как правильно использовать behavior?
Re: Как правильно использовать behavior?
я предложил готовое решение.proctoleha писал(а): ↑2018.02.20, 11:13Продумайте организацию хранения и удаления файлов таким образом, чтобы мусора в вашей системе не было в принципе. Имхо, это самое первое с чего нужно начинать. И, когда, начинаешь двигаться в этом направлении, то понимаешь, что готовых решений нет.
вот мой алгоритм - хранится оригинал, режется с помощью imgproxy https://github.com/DarthSim/imgproxy, кэшируется нджинксом.proctoleha писал(а): ↑2018.02.20, 11:13 Например, у меня алгоритм такой.
1. Есть дерево категорий, например, дерево категорий продуктов. В БД данные хранятся в виде дерева nested sets, в FS в виде плоского списка категорий продуктов по id категории. Например: uploads/products/1, uploads/products/2, ... uploads/products/n, где цифры - это id категории.
2. К каждой категории относятся несколько продуктов, например к категории с id ==1, относятся продукты с id == 1, id == 2, id == 3. Картинки для каждого продукта также хранятся в каталоге с именем == id продукта. На моем примере продукт с id == 1 хранится в каталоге uploads/products/1/1, c id == 2 в uploads/products/1/2 и т.д.
3. Предположим, что у продукта с id == 1 есть несколько картинок и превьюх (большие превью и маленькие с какими-то размерами). Например, есть большая картинка 1.jpg (uploads/products/1/1/1.jpg) и должны быть две превьюхи.
Например:
uploads/products/1/1/small_thumb/1.jpg
и
uploads/products/1/1/large_thumb/1.jpg.
Базовое имя файла не меняется, но это разные файлы, т.к. лежат по разным адресам, и у них разные размеры, сами файлы генерируются "на лету". И превьюхи всегда доступны! Если файла нет, он генерируется.
4. Для удаления я использую fileHelper, он находит все картинки с одинаковыми базовыми именами, и мусора не остается.=====================Код: Выделить всё
class DeleteImages { public static function deleteImages(string $dir, string $image) { $webRoot = FileHelper::normalizePath(yii::getAlias('@webroot')); if ($images = FileHelper::findFiles($webRoot . $dir, ['only' => [$image]])) { foreach ($images as $img) { unlink($img); } } } }
Я не утверждаю, что это идеальный алгоритм, но тем не менее мусора в виде превьюх у меня нет.
Немного проще, правда?