Только недавно интересовался этим вопросом.
Уточню, для начала, что я пользуюсь
готовым решением для работы с изображениями, и вам советую)
Сделал так:
1. Надо определится, сколько изображений будет в перспективе проекта.
Если будет 100 и через 5 лет существования проекта, то тогда ничего сложного изобретать не надо.
Если же больше, то тут нужно будет раскидывать их по папкам.
Ориентировочно для себя, я прикинул, что у меня в папке будет хранится примерно 20 фотографий.
А в проекте, я для себя установил планку в примерно 9000 изображений + их копии 300х200. и тут подсчёты.
9000*2/20 = 900 папок.
На самом деле 20 фотографий это даже маловато... Но эту цифру я выбрал по личным соображениям.
Такой код генерации:
$rand_int = rand(1,5);
$rand_md5 = md5(str_random(rand(6,15)));
$dir = '/images/uploads/minerals/' . $rand_int . '/' . $rand_md5[0] . '/' . $rand_md5[1] . '/';
Если посчитать потенциальные папки последнего уровня, то получится 1280. Вроде)) Мне надо столько как раз с запасом.
Как это получилось:
По коду понятно, что после папки minerals будет папка с именем в промежутке от 1 до 5.
Далее будет папка с именем в промежутке символов md5 хэша, а то есть: 0123456789abcdef.
Если я не ошибаюсь!!..
и имя последней папки случайно в том же самом промежутке символов.
Итого 5*16*16 = 1280. Потенциальных, заметьте, папок.
Все пути сохраняются в бд. И оригинального и превью изображений.
Можно играться с количеством вложенных папок, со словарём для генерации, не ограничиваясь только символами md5, можно имена папкам давать из 2-х символов и больше. Всё зависит от ваших потребностей, я лишь показал способ.
Если в названии папки будет 2 символа и больше, то считается по другому.