Fichiers multiples et dossiers ?

Nouveau WRInaute
Bonjour,

J'ai sur mon site un système d'ajout photos, les membres ajoutent des photos sur leur profil.

J'utilise le système le plus simple (je pense), j'ai une table "photos" dans laquelle le champ "id" correspond au nom de la photo sur le serveur. Les photos sont toutes stockées dans le même répertoire "photos/".

Depuis peu, la barre des 5000 photos à été passée et des problèmes surviennent...

Certaines photos sont mal générées. En effet des grandes zones grises apparaissent sur une partie plus ou moins grande des dites photos.

En réfléchissant un peu, j'ai pensé que cela venait certainement du grand nombre de photos (+ de 5000) dans le même répertoire.

J'en viens à ma question.
J'aimerais pouvoir stocker les photos dans différents répertoires avec un système logique, de façon qu'il soit possible, à partir de l'identifiant de la photo (et uniquement l'identifiant) de retrouver dans quel répertoire elle se trouve.

J'ai regardé comment fesait d'autre site et soit le système tiens compte du pseudo pour l'organisation du répertoire.

Exemple :

Un membre à un pseudo : je_suis_un_pseudo

La photo est stockée dans : photos/j/e/je_suis_un_pseudo/identifiant.jpg

Ce système ne me convient pas car il faut tenir compte du pseudo.

J'ai vu un autre système (sur le site d'une grande radio pour les jeunes) et eux font de cette manière :

La photo a par exemple cet identifiant : 14551234.jpg

Elle se trouvera dans : photos/4/3/2/4/14551234.jpg

Leur système stocke l'image en créant des répertoires correspondant aux 4 derniers chiffres de l'identifiant de la photo et ceci en lisant de la droite vers la gauche.

Cette deuxième méthode me parait efficasse mais je ne la comprends pas complétement, par exemple comment font-ils lorsque l'indentifiant ne se compose que de 3 chiffres.

J'aimerais donc savoir si vous avez déjà était confronté au problème et/ou avez-vous des solutions ?

Merci à vous.
 
WRInaute discret
Salut,

Cette méthode me semble bonne en effet.Pour le problème du nombre de chiffre, il suffit de faire quelques tests et le tours est joué, si l'id a 3 chiffres, tu le met dans un repertoire que tu appeleras 10 au dernier niveau par exemple. Si il en a 2, tu le met dans le repertoire 10 au 3e et au 4e niveau... etc
 
Nouveau WRInaute
Un petite erreur, la photo dans le second exemple se trouvera dans le répertoire : photos/4/3/2/1/14551234.jpg

benjiiim> Merci pour ton avis, mais j'avoue ne pas comprendre ton explication :), pourrais-tu me réexpliquer comment fais-tu si l'identifiant de la photo est, par exemple : 12.jpg ou 154.jpg.
 
WRInaute discret
Bonsoir,

Je n'ai jamais développer un tel système de photo mais c'est juste une petite astuce qui t'aideras peut être, je vais essayer d'être plus clair.

Prenons un exemple un peu plus simple où tu souhaites 3 niveaux de dossier (contrairement aux 4 que tu suggerais).

Si l'id est 321 : Tu stockes dans l'arborescence des dossier suivant : 1>2>3

Ma suggestion consiste à remplacer le chiffre "manquant" dans l'identifiant par n'importe quel nom de dossier. Par exemple 10 ou n'importe quoi d'autre.

Donc si l'id est 12 : tu stockes dans l'arborescence : 2>1>10
Pour cela tu fais un test pour savoir si l'id est compris entre 99 et 10

De même si l'id est 3 : tu stockes dans l'arborescence : 3>10>10
Dans ce cas, tu fais le test pour detecter un id compris entre 9 et 0

J'éspère avoir été plus clair et que cette solution te permettras de resoudre ce problème.

N'hésite pas a me redemander...
 
WRInaute impliqué
Une solution est de générer des identifiant de longueur fixe. Exemples:
Code:
md5(rand()*time()) // 32 caractères 
sha1(rand()*time()) // 40 caractères
 
Nouveau WRInaute
benjiiim> Merci pour tes explications, je vais potasser sur cette méthode.

shrom> J'avoue ne pas comprendre le rapport. En créant un identifiant unique, chaque photo sera dans un répertoire unique donc par exemple 10000 photos, 10000 répertoires. C'est cela que tu voulais dire ou je n'ai pas compris ?
 
WRInaute discret
Nan, ce qu'il voulait dire (si je peus me permettre shrom), c'est de créer des identifiants de taille unique, c'est à dire au lieu d'avoir un id 121, tu aurais l'id 0121, comme ca pas de problème de taille, ils auront tous 4 chiffres.
Personnelement je ne suis pas pour gérer les identifiants à la main, les numéros auto des bases de données sont parfaites pour cela. De plus, cela implique une modification des ids déjà existants dans ton application, ce qui peut poser des problèmes (et surtout du travail) avec beaucoup de relations dans ta table.

Bon dev !
++
 
Discussions similaires
Haut