Струпване на много файлове

renegat96

Registered
Дайте идеи за това как да предотвратя струпването на много файлове в една директория.
Правя сайт, в който потребителите ще качват файлове, и не трябва да се случва така, че файловете да се трупат на едно място.

Как да го направя ?
В основната папка, качвам файлове, докато станат 1000, след което започвам в подпапка, после в друга подпапка, докато папките станат 1000.
После в директория, която се намира в първата подпапка, докато и там станат 1000 ? :?
Как ви се струва това ?
Има ли по-добър начин ?
 
1000 файла не е нищо. По-скоро 10k

И няма смисъл да трупаш трупаш... и изведнъж някаква папка.

главна папка

- папка 1.1
-- папка 1.1.1
-----10к файла
-- папка 1.1.2
-----10к файла
-- папка 1.1.3
-----10к файла
-- папка 1.1.4
-----10к файла
-- папка 1.1.5
- папка 2.1
-- папка 2.1.1
-----10к файла
-- папка 2.1.2
-----10к файла
-- папка 2.1.3
-----10к файла
-- папка 2.1.4
-----10к файла
-- папка 2.1.5
 
Няма значение...
Някакъв определен брой.
Дали ще са 1к или 10к не мисля, че има голямо значение за писането на кода. :)

Но това ли е начина ?
Нещо друго да предложиш ? :?
 
направи с крон през определено време да брои колко файла имаш в главната папка ако са повече от определен брой скрипта да прави нова директория и тя да става главна.
 
SveXteZ каза:
направи с крон през определено време да брои колко файла имаш в главната папка ако са повече от определен брой скрипта да прави нова директория и тя да става главна.

Не си ме разбрал...

На мен ми трябва идея как ще стане.
Реализацията е лесна :)
Имах предвид дали има друг начин на организиране на папките, в които да слагам файловете.

Като се замисля начина на Soul_Stealler, с това да няма файлове в папките, в които има други папки, е достатъчно добър.
Мерси много :)
 
Ако размера на файловете не е много голям, защо не ги записваш в БД?

Идея:

Номерираш качваните файлове с цифри. Първия ще е 0000001, следващия 0000002 и т.н.
Директориите също ще са ти числови стойности: 1000, 2000, 3000 и т.н.

Записваш поредния номер на всеки качен файл в нарочна таблица в БД.

Когато качваш файл проверяваш за последния номер в БД и добавяш +1 към името.

Ако номера е да речем повече от 1000, създаваш нова директория и я наричаш 2000 и записваш файла в нея.

Когато показваш файл (или го четеш за даунлоуд) проверяваш името му - ако името му като число е по-голямо от 1000, търсиш файла в директория 2000.

Хубавото на този метод е че пестиш ресурси (заявки към БД), а самата БД ще се грижи за синхронизирането на имената - проблем, с който би могъл да се сблъскаш при много файлове и който иначе ще ти се налага да решаваш сам, което не винаги е толкова лесно.

Дано съм те ориентирал.

Успех!
 
sizif каза:
Ако размера на файловете не е много голям, защо не ги записваш в БД?

Идея:

Номерираш качваните файлове с цифри. Първия ще е 0000001, следващия 0000002 и т.н.
Директориите също ще са ти числови стойности: 1000, 2000, 3000 и т.н.

Записваш поредния номер на всеки качен файл в нарочна таблица в БД.

Когато качваш файл проверяваш за последния номер в БД и добавяш +1 към името.

Ако номера е да речем повече от 1000, създаваш нова директория и я наричаш 2000 и записваш файла в нея.

Когато показваш файл (или го четеш за даунлоуд) проверяваш името му - ако името му като число е по-голямо от 1000, търсиш файла в директория 2000.

Хубавото на този метод е че пестиш ресурси (заявки към БД), а самата БД ще се грижи за синхронизирането на имената - проблем, с който би могъл да се сблъскаш при много файлове и който иначе ще ти се налага да решаваш сам, което не винаги е толкова лесно.

Дано съм те ориентирал.

Успех!
И аз ти предлагам това.
Аз го правих в един мой сайт точно по този начин.
 
Моето предложение е при регистрация да прави 1 директория с името на потребителя или неговото id. Всичко което се ъплоудва да се качва там. Например имаш 1 папка users/ и в нея имаш папки renegat/ pe6o/ и т.н.

Оп то може да ти трябва без регистрация. При ъплоуд да създава папка с md5($_SERVER['REMOTE_ADDR'])
 
Моето предложение е всеки файл да бъде със следното име:

Код:
$filename = time().'_'.$FILES['file']['name'].'_'.md5($_SERVER['REMOTE_ADDR']);
 
radio_stun4fun каза:
Моето предложение е всеки файл да бъде със следното име:

Код:
$filename = time().'_'.$FILES['file']['name'].'_'.md5($_SERVER['REMOTE_ADDR']);
И какво постига?
Аз бих го направил така -> rand(1,10) -> и записвам в папка с име числото или нещо подобно. Отделно можеш да си направиш и проверка дали има повече от X брой файлове, и ако има да отива в другата папка :)
 
Имената на файловете няма да са тези, които потребителите определят.
Скрипта ще ги определя сам.
Съображението ми е това, че потребителите не трябва да могат да отварят директно даден файл, а да ги преглеждат през сайта.
Както и това, че нямат нужда да ги свалят.
Само да ги гледат :)

Това да са в папки с имената на потребителите също не е добър вариант, защото не виждам проблем в името на потребител да има ..\ нещо такова...
И...тук става лошо.
А ограничаване на имената не е добър вариант според мен.


@sizif файловете ще са текстови
За да ги запазя в база данни, ще трябва да ги минавам през htmlspecialchars и addslashes, което ще е неприятно.
А за да ги запиша като файл, не трябват такива промени.
Директно ги записвам на сървъра.

И да...и аз мислих за това - в базата данни ще имам таблица с 2 полета, които ще ми казват до коя папка съм стигнал и колко файла има в нея.
Когато стигна 10к минавам на следващата папка и занулявам :)
Чисто и просто.
В базата данни ще си записвам за всеки файл: кой го е качил и път до него.
Перфектно стана! :)


Като стане готово ще го изрекламирам :D
 
Написах си кода :)
Стана...
Благодаря на всички.

Точката получава sizif, защото даде най-добрата идея според мен :?:
 

Back
Горе