Forum Programmation.php Comment bien organiser ses photos et images ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
1
7
mar.
2015

Bonjour ! Je viens demander un petit conseil concernant l'organisation de photos en PHP pour un site web. Cela fait plusieurs semaines que je n'arrive pas à me décider concernant la structure de mon dossiers "photos". J'ai beau regarder un peu ce qui se fait autour de moi et je trouve que sincèrement le bordel.

Le plus simple serait de donner un ID unique à une photo et de la placer naturellement dans le dossier. Hors, mon script crée de nouvelles images selon les dimensions souhaitées, par exemple, une simple photo uploadé par un utilisateur donne ceci :

/photos/4561345613.jpg
/photos/4561345613-large.jpg
/photos/4561345613-medium.jpg
/photos/4561345613-thumbnail.jpg

Je me dis qu'à force d'envoyer ds images, ça risque d'être très difficile à maintenir surtout que j'autorise les membres d'uploader des photos. Puis je me suis dis, que je pourrais créer un dossier par image, qui ce dernier contiendrais tous les autres fichiers de la photo.

Bien entendu je pourrais créer un structure en fonction de la catégorie :

/photos/users/$username/4561345613.jpg
/photos/users/$username/4561345613-large.jpg
/photos/users/$username/4561345613-medium.jpg
/photos/users/$username/4561345613-thumbnail.jpg

Mais ça m'oblige à écrire un peu plus de code et ce n'est pas forcément plus facile à maintenir et puis où mettre les photos sans catégorie ?

Alors je sèche complètement et je me tâte à tout mettre dans le même dossier… Qu'en pensez-vous ?

En prenant l'exemple de linux.fr, ça donne :

http://img.linuxfr.org/img/ID_TRES_LONG/ID-NAME.jpg

est-ce le meilleur schéma possible ? A quoi correspond le premier ID ?

Merci les amis !

  • # d'autres pistes

    Posté par  . Évalué à 2.

    en supposant que tu n'utilises pas une base de données pour referencer tes images,
    mais juste des dossiers/fichiers

    les images rangées dans des dossiers
    Normal/
    Large/
    Mini/

    toutes les photos dans un meme dossier selon leur taille, avec un nom de fichier du style :
    date_longue-user-numero.png

    avec date_longue qui serait
    soit la date de l'upload,
    soit la date de la photo, recuperer dans les données EXIF de l'image
    avec un formatage : 20150307-13h15
    pour pouvoir classer facilement les photos par date.

    si tu veux permettre la creation d'un album, tu peux le rajouter
    dans le nom du fichier par ex.
    date_longue-user-evenement-numero

    mais de nos jours, ca me semblerait plus interessant de passer par une petite base de donnée,
    ou tu stockes le nom de l'image, quelques infos utiles comme l'auteur, le lieu, et ou tu pourrais ajouter des tags/nom d'album

    • [^] # Re: d'autres pistes

      Posté par  (site web personnel) . Évalué à 1. Dernière modification le 07 mars 2015 à 13:34.

      Oui, j'ai oublié de préciser que j'utilise une base de données pour tout stocker, voici ma table :

      id int(11) Non

      title varchar(60) Non

      description varchar(100) Oui NULL

      category varchar(15) Oui NULL

      mime varchar(10) Non

      width int(11) Non

      height int(11) Non

      fileraw varchar(60) Non

      filename varchar(60) Non

      filesize int(11) Non

      fullpath varchar(300) Non

      gallery_id int(11) Oui NULL

      user_id int(11) Oui NULL

      created datetime Non

      modified datetime Non

      Pour le moment je me suis fait une structure de ce type :

      /photos/YEAR/UNIQID/UNIQID-FORMAT.jpg

      et j'en ai profité pour créer un tableau de configuration selon les cas, bien que je vais garder le tout générique.

      Donc comme tu le souligne à la fin de ton message, quand on a une base de données, inutile d'avoir une structure complexe, vu que toutes les informations sont stockées dans la base de données…

      • [^] # Re: d'autres pistes

        Posté par  . Évalué à 2.

        Donc comme tu le souligne à la fin de ton message, quand on a une base de données, inutile d'avoir une structure complexe, vu que toutes les informations sont stockées dans la base de données…

        voila oui,

        • tu stockes les images dans 3 dossiers selon la taille (mini, large, original)
        • tu stockes le nom de l'image dans la base de données, avec les infos optionnelles mais utiles (album, auteur, dates)

        et c'est ton code qui fait le reste,
        genre prendre les photos de telle à telle date (c'est un select dans la base de données)
        ca recupere les noms des fichiers,

        puis dans ta boucle de lecture du resultat, tu mets le chemin mini/large/original selon que tu es en vue miniature, large ou original ;)

  • # Piste

    Posté par  . Évalué à 2. Dernière modification le 07 mars 2015 à 13:52.

    J'ai une méthode assez simple et très efficace :

    • Un dossier source où les images sont stockées sous la forme <ID_IMAGE_BDD>.<EXTENSION_DU_FICHIER>
    • Un dossier thumbs où les images redimensionnées sont stockées sous la forme <ID_IMAGE_BDD>_<WITDH>x<HEIGHT>.<EXTENSION_DU_FICHIER>

    Je n'enregistre en base de données que les fichiers sources (avec leurs noms original, leurs extensions et quelques autres informations).

    Les images redimensionnées sont automatiquement générées si le fichier correspondant à la taille demandée n'existe pas. Et si demain tu changes les tailles correspondant à 'medium', 'large' ou 'thumbnails' ou que tu as besoin d'une autre taille, il n'y a pas de changement à faire dans la structure de tes dossiers, tu changes ton code/conf/variable correspondant à la taille et il te régénère toutes les images dont la taille demandée a changé.

    Il est aussi très facile d'y faire le ménage avec la correspondance des ids. Si dans le dossier thumbs une taille est supprimée alors qu'elle n'aurait pas dû l'être cela n'as pas d'autre conséquence que sa régénération lors du prochain affichage de l'image.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.