[PHP] albums photos

Bonjour tlm,

j’ai besoin de faire des albums photos sur mon site. Le problème est le suivant: que choisir comme méthode.
J’avais d’abord pensé à un système de base de donnée avec un formulaire où j’ajoutais photo par photo ce qui entrait une ligne dans ma db, uploadant le fichier, créant la miniature,…
Mais je me suis vite mis face au problème: certains albums seraient formé de plus de 500 photos et remplir le formulaire (parcourir,…) pour autant de photo est infaisable. La seule manière est d’uploader les fichiers à la mains par ftp.
Pas de problème jusque là mais alors je me demande: faut il une db (sachant qu’il n’est pas indispensable de contenir des informations spécifique à chaque photos).
Deuxième problème: les miniatures: faut il les créer à la mains (en local) ou le faire faire par un script.

J’ai pensé alors à faire un script qui à chaque affichage scannerai les dossiers (par exemple un dossier par album) et qui afficherai le contenu de ce dernier (un dossier miniature et un dossier grand). Mais cette opération n’est elles pas beaucoup plus gourmande qu’une requete sql?

Merci d’avance pour vos conseils

titib

Bonjour,

j’ai aussi créé un album photo qui sont rangées par catégorie et je n’utilise pas de BDD.

Voici comment j’ai procédé :

1 - Création des répertoires (le nom du répertoire = la catégorie)

2 - Création du formulaire pour upload de photos uniques

3 - Upload des photos via FTP (s’il y a en beaucoup)

Ensuite j’ai créé un script qui permet de lister toutes les photos

  • soit par catégorie
  • soit pour l’ensemble des répertoires
    et qui créer un fichier TXT dans chaque répertoire avec les noms des photos, poids, date de création, type,… (en enlevant le .jpg .gif qui se trouve derrrière)

Puis une Deuxième script qui permet d’afficher en miniature la photo lu à la volée.

Enfin pour l’affichage, j’ai créé un script qui lit le fichier TXT qui permet de faire les différents liens et le trie entre les catégories et les photos voulues qui sont à afficher…

Sinon tu peux utiliser une méthode encore plus simple :
Créer un script qui permet le lire tes répertoires et afficher à la volée les photos… (inconvénient : gros mangeur de ressources systèmes)

Axiome

c’est exactement ce à quoi j’avais peur: les ressrouces. Ton système me parait pas mal.
Je peux le faire en mysql aussi (je maitrise mieux les interrogation php/mysql que les fichiers textes). Ca revient finallement au meme: lorsqu’on ajoute des photos: on scan le dossier et on ajoute n entrée a la db (ou au fichier texte) et pour l’affichage on lit la db (ou le fichier texte).

Ca me parait honnete.

Merci du conseil

QQ’un d’autre aurait d’autres idées? (je suis a la recherche de la meilleure méthode)

moi aussi j’ai fait ce type de soft (c marrant pour passer le temps)

ps : il suffit de tester si la miniature existe avant de la generer ou pas (file_exists() de tete ?) les miniature pourraient se nommer pareil que la haute def mais avec un . devant… (ou ce que tu veux…)

ensuite pour le upload il existe des class php zip… suffit d’uploader un repertoire zipper et de le decompresser juste aprés enfin c une idée…

enfin pour la structure general des repertoire et sous repertoires libre style explorer

pour ajouter des commentaires au choix :

  • un fichier .txt du meme nom que l’image
  • une bd avec le path comme pk et un fulltext index sur les champs commentaire+path (recherche par mot clé)

ps : faire un fichier TXT de recap c une bonne idée mais techniquement un repertoire c deja un fichier qui contient c données donc opendir() etc…

oui, mais lister un repertoire est plus long et plus gourmand que de lire un fichier.

Puis pour le frait d’uploader un repertoire, c impossible pcq j’ai des repertoire de 30-40 Mo… donc ca va pas pouvoir se faire (php.ini limité à 8Mo si je ne me trompe pas).

Le mieux c encore je pense de tout upper par ftp et de générer les miniature en local avant l’upload, sinon ca risque d’être trop lourd. Non?

il faut faire ce qu’il te semble le mieux :wink:

lister un repertoire ben non c pas plus long que d ouvrir un fichier (because je repete un repertoire C un fichier) …

ce qui est effectivement plus long c de recuperer les info de chaque fichier…

donc solution : utiliser opendir pour generer un fichier texte contenant toutes les infos necessaire a chaque foi qu il y a de nouveau fichiers…

encore mieux foutre tout ça dans une base…

pour l’upload ça depend si c toi qui administre seul ou si les utilisateurs on des droits d’upload…

dans tous les cas envoyer un seul gros fichier est plus rapide que plusieurs petits… enfin la c pointu :wink:

pour les miniature je pense qu’il vaut mieux se faire un script php ‘inteligent’ (generation conditionnelle seulement si l’imagette n’existe pas) ça t’evitera des tas de manip de maintenance … en plus si d’autre utilisateurs envoi des photos , rien ne les oblige a créer des miniatures… (a quelle taille ?, etc)

je pense que je vais créer une bdd avec les infos des fichiers, c’est plus rapide et plus facile à utiliser (pour moi en tk)
Au niveau de l’upload, y a pas le choix, ca doit se faire par ftp à cause du nb important de fichier (et donc de leurs poids important)
Pour ce qui est du dezippe, c’est envisageable mais je n’en vois que moyennement l’interet pour être honnete

et pour les miniatures, là par contre je m’interrge: l’idéal est de les générer à par des fichiers orignaux avec un script, mais si chaque miniature fais 25ko et que j’ai 1000 fichiers pour un album, ca me fait 25Mo à traiter en un coup. Est-ce que c’est possible pour un script php ou pas? (sans modifier le php.ini). Surtout que ca va mettre des heures et que si le scrpt plante pour une raison ou une autre, je ne sais pas où il s’est arreté.

La solution serait donc comme tu le suggère de faire les miniatures soit meme, de les uploader et de tester si elles existes lors de la création des infos dans la bdd (file_exists).

Ca te semble honnete comme solution?

j’ai encore un autre problème que je pose: la nomination des fichiers.
Est-ce que je met une nomination cohérente (auquel cas je dois renommer chaque fichier avec mon script ou a la mains avant l’upload) ou j’upload chaque fichier avec son nom et ca n’a aucune importance vu qu’ils sont référencés dans la bdd

De toute facon, il s’agit de photos numérique donc nommés seon l’appareil type DSCNxxxx.jpg ou IMGxxxx.jpg donc doffice trié dans l’ordre de prise (excepté quand on arrive au bout :stuck_out_tongue: )

pcq si je veux pour chaque fichier regarder l’exif ca va bouffer des ressources comme pas possible (je ne sais meme pas comment le faire, mais ca doit être faisable)

je viens de vérifier et l’option exif est activé dans mon php donc je pourrais utiliser ca pour remplir ma db de la date de prise…

en fait je te conseille de faire un script tout bete qui du style


<img src="miniature.php?src=images/album1/258.jpg">

miniature.php

  • ce script verifie qu’une miniature existe pour l’image en parametre
  • la genere si elle n’existe pas
  • l’affiche avec gd en mettant le type mime correct avec header()…

donc les miniatures ne sont generée qu’au premier affichage

si tu gere le truc intelligemment tu n’affiche pas toutes les miniatures d’un coup mais par exemple 20 par 20 avec un systeme de page…

donc chaque appelle a un index de miniature appelera 20 fois le script de generation au pire… et le temps d’execution ne se cumule pas !!! :)))

ps :

si tu veux renommer puisque tu utilise une base creer un index auto incrementé et renomme t image avec l’id obtenu a l’insert…

le secret d’une bonne prog c la dicotomie :slight_smile:

coupe les pb en sous pb et valide par le bas ! :slight_smile:

l’idée du premier affichage est pas mauvais mais je n’en vois que moyennement l’interet.
Autant le faire au début, page par page mais en mode admin. Par exemple faire une page “générer les 20 première miniature”. On clique dessus, s’affiche la page suivante “générer les 20 miniatures suivantes”,… et ainsi de suite jusqu’à ce que “toutes les miniatures ai été générée”

sinon ca implique de faire le test à chaque affichage de page, c un peu lour dpour pas gd chose…

le pb avec ce petit script c qu’on ne beneficie pas bien de l’effet de cache… 8(

enfin pas bien selon les navigateurs avec firefox ça doit etre bon

ben c images c bien pour que les gens les voi ?

donc quand ils les affichent ça generes les miniatures …

toi tu fait qu’upload et basta !

l’interet c que ça equilibre la charge processeur du serveur dans le temps…

excuse moi, je dois être completement crétin mais j’ai tjs l’impression que ca bouffe de la ressource pour rien.
Je m’explique:
si tu génère toutes les miniatures après avoir uploader les grandes images, une fois ca fait, la page d’affichage se contante d’aller vérifier le nom de l’image dans la bdd et de l’afficher.
Si ca se génère à l’affichage, le test est bcp plus lourd: cherche dans la bdd, vérifie si la maniature existe, si c’est le cas affiche, cas contraire, créer la mniature

en outre, ca fait un test en plus pour chaque image. Donc si il y a 20images par page, ca va faire 20 if(file_exists) en un coup.

Et si tu es dans le cas où aucune miniature n’a été créer, ben le premier visiteur va se tapper la création de 20 minitatures et donc une page qui va mettre peu etre 1minutes à s’afficher…

Tu peux m’expliquer l’interet…? (encore une fois, si j’ai rien compris, pardonne moi)

heu

je precise juste que j’ai deja fait ce soft… et que c des truc que j’ai utilisé…

c relativement rapide… meme si aucune miniature existe… en plus la page s’affiche puis les imagette apparaisse une par une donc l’utilisateur n’y voi que du feu… et ça prend pas 1 minute je te rassure 20 secondes au plus… pour le premier utilisateur !

en tout cas ça evite d’avoir des script monstrueux qui crée toutes les imagettes et qui peuvent planter

en plus on est sur de ne pas oublier d’imagette le script verifie avant de l’aficher… un file exists c pas la mort en plus c plus simple que ça le script tente d’ouvrir le fichier et s’il il y arrive l’affiche donc c comme un acces a un fichier ni plus ni moins et si il arrive pas a l’ouvrir il le crée a pa rtir de l’original

c sur faut eviter d’avoir des milliers de fichiers dans un repertoire !!

j’ai fait un soft pour un quotidien (upload photo des correspondants) et je créer un repertoir par jour histoire de pas tout avoir dans le meme repertoire)

question facilité d’administration aussi c mieux

si par ex chaque image a un nom unique (un id qui correspond a l’enregistrement dans la base) comme ça tu peux reorganiser l’arborescence des albums sans te soucier de modifier trop de chose (mettre a jour la miniature, modifier plein de path dans la base etc…)

conclusion/recap

donc oui c un peut plus lent pour afficher si les miniature n 'existe pas…
mais :

  • tu n’as pas a verifier si toutes les miniatures existent
  • tu n’as pas a créer toutes les miniatatures quand tu doit charger un nouvel album (et ça ça peut etre long et fastidieux, surtout si tu doit y passer la journée :confused: )

ps : je cherche rien dans la bdd pour afficher :slight_smile:

excuse moi, mais je ne comprend tjs pas l’interet de le créer au premier affichage par rapport a le créer à l’upload…

si tu upload 500 photos faudra plus de 30 seconde pour generer les imagettes hors 30 secondes c la duree maxi d’un script php par defaut ! >>> script KO