JohnCMS | Upload

6.72K
.
Кадило крутится, лавэха мутится
# ramzes (23.08.2016 / 17:34)
Simba, в смысле?
какой раскидки? распределения физ файлов?
зачем мд5?
Выше посты смотри с примером хранилища.
С md5 у тебя будет логически всё раскидано по папкам.
.
(\/)____o_O____(\/)

ramzes, можешь посмотреть 40 мин видео либо на хабре посмотри, ссылку Макса

.

ааа, блин, не видел почему то того поста
понял. но это вариант без хранения адресов в таблице, с ней это совсем не обязательно, по таблице можно просчитывать загруженность категории, и просто менять\создавать новую, или даже элементарно сделать счетчик на добавлении, при наборе допустим 100 файлов обнулять его и создавать новую папку, складывать в нее, и так до бесконечности.
есть над чем подумать.
хотя во всей этой идее с таблицей меня больше всего парит недоступность мемкеша\редиса на обычном хосте, с учетом этого таблица может стать просто неподьемной, и тогда выгоднее адрес расчитывать на лету исходя из имени файла, в этом случае с мд5 отлично придумано

.
(\/)____o_O____(\/)

ramzes, даже с одной веткой ты не напряжешь каталог файлами

.
# Koenig (23.08.2016 / 17:55)
ramzes, даже с одной веткой ты не напряжешь каталог файлами
что?
________
зная логику генерации хранения получить несанкционированный доступ к файлу не составит труда
.
(\/)____o_O____(\/)

ramzes, к мд5 можно соль приписать, получи попробуй

.
(\/)____o_O____(\/)

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();
.
(\/)____o_O____(\/)

ramzes, и кстати если файлы хранить в бинарном виде, то смысл файл получать по прямой ссылке, должно быть хранилище которое отдаёт бинарник, а имя и прочие параметры файла находятся в базе, скрипт отдаёт файл заголовками, хоть пхп файлы грузи

.

Уважаемые ramzes и Jahak ! Просьба - выясняйте отношения в лс.
___________________________________________________________________

Jahak, я ведь предупреждал сегодня. Тут тема не о симпатиях к кому-то, и если хочешь что-то сказать кому-то лично -- пиши ему в приват! Больше просить не буду, обижайтесь потом сами на себя.

Всего: 140