# ramzes (23.08.2016 / 17:34)
Simba, в смысле?
какой раскидки? распределения физ файлов?
зачем мд5?
Выше посты смотри с примером хранилища.
С md5 у тебя будет логически всё раскидано по папкам.
ramzes, можешь посмотреть 40 мин видео либо на хабре посмотри, ссылку Макса
ааа, блин, не видел почему то того поста
понял. но это вариант без хранения адресов в таблице, с ней это совсем не обязательно, по таблице можно просчитывать загруженность категории, и просто менять\создавать новую, или даже элементарно сделать счетчик на добавлении, при наборе допустим 100 файлов обнулять его и создавать новую папку, складывать в нее, и так до бесконечности.
есть над чем подумать.
хотя во всей этой идее с таблицей меня больше всего парит недоступность мемкеша\редиса на обычном хосте, с учетом этого таблица может стать просто неподьемной, и тогда выгоднее адрес расчитывать на лету исходя из имени файла, в этом случае с мд5 отлично придумано
ramzes, даже с одной веткой ты не напряжешь каталог файлами
# Koenig (23.08.2016 / 17:55)
ramzes, даже с одной веткой ты не напряжешь каталог файлами
что?
________
зная логику генерации хранения получить несанкционированный доступ к файлу не составит труда
ramzes, к мд5 можно соль приписать, получи попробуй
ramzes, и если ю3ать md5_file ещё и уникальность можно сверять
По поводу превьюшек в текущем проекте решил эту проблему с наименьшими потерями. Сделал примерно так:
FileStorage (+/-)
class FileStorage{
// ...
public function addVariant($id, $name, callable $handler){
$filePath = $this->dir . '/' . $id;
$variantPath = $filePath . '_' . $name;
if(!file_exists($filePath)){
throw new RuntimeException('File not found');
}
$editor = new SimpleImage($filePath);
list($quality, $mimetype) = call_user_func_array($handler, [$editor]);
$editor->save($variantPath, $quality, $mimetype);
}
/**
* @param string $id Идентификатор исходного файла.
* @param string $name Имя вариации исходного файла.
*
* @return string|null Путь до вариации исходного файла.
*/
public function atVariant($id, $name){
$path = $this->dir . '/' . $id . '_' . $name;
if(!file_exists($path)){
return null;
}
return $path;
}
}
Работать с этим надо так:
$filestorage = new FileStorage(...);
$filestorage->addVariant($idFile, 'small', function(SimpleImage $editor){
$editor->crop(68, 68);
return [80, IMG_JPG];
});
$smallFile = $filestorage->atVariant($idFile, 'small');
echo $smallFile->getAddress();
ramzes, и кстати если файлы хранить в бинарном виде, то смысл файл получать по прямой ссылке, должно быть хранилище которое отдаёт бинарник, а имя и прочие параметры файла находятся в базе, скрипт отдаёт файл заголовками, хоть пхп файлы грузи
Уважаемые ramzes и Jahak ! Просьба - выясняйте отношения в лс.
___________________________________________________________________
Jahak, я ведь предупреждал сегодня. Тут тема не о симпатиях к кому-то, и если хочешь что-то сказать кому-то лично -- пиши ему в приват! Больше просить не буду, обижайтесь потом сами на себя.