Я написал функцию для своих сайтов, которая преобразует идентификаторы пользователей в двухуровневую иерархию подкаталогов, ограничивающую подкаталоги 1000 на каждом уровне.
function get_image_dir($gid) {
$d = str_split(str_pad($gid, 6, "0", STR_PAD_LEFT), 3);
$wdir = "/images/members/" . $d[0] . "/" . $d[1] . "/" . $gid;
return $wdir;
}
(на самом деле я добавляю третий уровень с необработанным идентификатором пользователядля обработки ролловера на 1 000 000
/images/members/000/001/1
/images/members/000/002/2
...
/images/members/999/999/999999
/images/members/000/000/1000000
/images/members/000/001/1000001
В этих подкаталогах я дополнительно разделяю на основе
- альбомов (организованных участниками)
- различных размеров (дляразличные места на сайте
Окончательная структура выглядит примерно так:
/images/members/000/001/1/album1/original
/images/members/000/001/1/album1/50x50
/images/members/000/001/1/album1/75x75
/images/members/000/001/1/album1/400x300
Функция str_split(str_pad())
в функции, вероятно, не оптимальна, но пока она работает.