titouille | Bonjour forum !!
Parce que nous sommes en train d'isoler notre maison, (une maison en copropriété appartenant à 2 personnes, dont ma mère, qui n'habitent pas là), je prend des photos de l'avancement. Et je me suis dit que le meilleur moyen pour que tout le monde puisse en profiter serait de proposer un petit "picture viewer" qui me permette, avec un minimum d'effort, de mettre en ligne chaque soir les photos prises durant la journée.
J'ai donc développé à partir de quelques fichiers un mini gestionnaire me permettant simplement de glisser un nouveau répertoire dans la racine ou se trouve mes fichiers php, lui attribuer un chmod 0777 et le tour est joué.
Dans mon élan, je me suis dit que pour faire bien, j'allais générer des miniatures pour les afficher, et sur click, on pourrait voir l'original (des photos à des formats relativement grands, pour avoir tous les détails...)
Alors pour mettre en place tout ça, j'ai créé une classe assez simple, qui me permet tout d'abord de récupérer la liste des répertoires pour en afficher un menu, puis une seconde méthode me permet de récupérer la liste des fichiers dans un répertoire qu'on aura sélectionné dans le menu.
Dans cette seconde méthode, je fait un test pour savoir si il existe un répertoire "thumbs" dans le répertoire cible, et si ce dernier contient un fichier du même nom que celui que je traite actuellement.
Si ce n'est pas le cas, je génère alors ma miniature et je continue mon traitement.
Le problème, dans tout ça, c'est qu'en local, tout fonctionne bien dans le meilleur des mondes, mes miniatures sont générées au besoin, et tout va bien. Par contre, en distant, il me regénère à chaque fois les miniatures, même si elles existent déjà dans le répertoire thumbs/
Le code de ma méthode est relativement simple :
Code :
- function getPicturesList( $dir )
- {
- $d = opendir( "./$dir" );
- $tab = array();
- while( $content = readdir( $d ) )
- {
- if( is_file( "$dir/$content" ) )
- {
- $size = getImageSize( "$dir/$content" );
- // Cacul des nouvelles dimensions
- list($size[0], $size[1]) = getimagesize("$dir/$content" );
- $width = 600;
- $height = 400;
- if ($width && ($size[0] < $size[1])) {
- $width = ($height / $size[1]) * $size[0];
- } else {
- $height = ($width / $size[0]) * $size[1];
- }
- array_push( $tab, array( 'data' => $content,
- 'label' => $content,
- 'size' => filesize("$dir/$content" ),
- 'height' => $size[1],
- 'width' => $size[0],
- 'maxheight' => $height,
- 'maxwidth' => $width,
- 'path' => "$dir/$content",
- 'thumb' => "$dir/thumbs/$content",
- 'popup' => "<b>path</b>: $dir/$content<br /><b>thumb</b>: $dir/thumbs/$content<br /><b>size</b>: {$size[0]}w / {$size[1]}h" ) );
- if( !is_file( BASE_PATH . "$dir/thumbs/$content" ) )
- {
- $this->createThumb( $dir, $content, 100, 100, 'jpg' );
- }
- }
- }
- closedir( $d );
- return $tab;
- }
|
C'est dans le if de fin que je passe automatiquement, comme si il ne trouvait pas le fichier spécifié, alors qu'il existe...
J'ai tenté différentes approches... BASE_PATH correspond au chemin du script en cours. Au départ, j'avais fait sans, j'ai tenté de changer en espérant que ça modifie le comportement, mais que nenni... Donc si quelqu'un à une idée à soumettre, ça serait bien... Générer les miniatures à chaque fois sur des photos de 2272 / 1704 px, c'est un peu lourd...
D'avance merci pour une quelconque piste
A++
PS : le picture viewer : http://www.sabugo.ch/corin |