Problème sur l'affichage d'images

Problème sur l'affichage d'images - PHP - Programmation

Marsh Posté le 01-10-2007 à 23:46:02    

Bonjour à tous.
 
Voilà j'essaye de fabriquer une page qui afficher des photos. Bon je tatonne encore beaucoup en PHP... Alors soyez indulgeants, merci :D !
Alors le fonctionnement :
Toutes les pages php sont en racine du site. Les photos sont dans un dossier photos puis classées dans des dossiers ayant eux-mêmes des dossiers et parfois encore un niveau de dossier à l'intérieur.
 
La page index.php possède un lien dans le menu :  

Citation :


<a href="index.php?lang=<?="$lang"?>&amp;rub=photos&amp;saison=07e"><?="$rub_5_2"?></a>


Donc je fait un include de la page rub_photos.php avec comme paramètre saison=07e .
La page rub_photos.php :

Citation :


<p align="center" class="gdtitre">Photos</p>
<hr /><br />
<p>&nbsp;</p>
<p>Voilà la liste des photos. Cliquer sur le dossier voulu pour accéder aux photos ! Bon visionnage ;-) .</p>
 
<?
$saison=$_GET['saison'];
 
function liste($dir){
 if ($_GET[v]) { $v=$_GET[v]; }
 $dossier=opendir($dir);
 while ($fichier=readdir($dossier)) {
  $berk=array('.', '..');
  if (!in_array($fichier,$berk)) {
   $lien="$dir/$fichier";
   $nbrT=count(split("/",$lien))-2;
   //if ($v==$lien) { $here='<span class="here">';$hereEnd='</span>'; } else { $here='<span class="hereOn">';$hereEnd='</span>'; }
   $space="";
   for ($i=1; $i<$nbrT; $i++) { $space.='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; }
   if (is_dir($dir."/".$fichier)){
    //echo $space.'<img src="/tutoriel/rep.jpg" border="0"> '.$here.'<b> <a href="index.php?v='.$lien.'">'.ucfirst($fichier).'</a> </b>'.$hereEnd.'<br />';
    echo $space.'<img src="images/boueeS6.PNG" width="10" height="10" alt="¤" /> <b> <a href="index.php?rub=photos_aff&amp;dossier='.$lien.'">'.ucfirst($fichier).'</a> </b><br />';
    liste("$dir/$fichier" );
   }
  }
 }
}
 
$v=htmlentities($_GET[v]);
 
//$situation=str_replace("./test/","",$v); $situation=str_replace("/"," > ",$situation);
$repertoire='./photos/20'.$saison;
$situation=str_replace($repertoire,"",$v); $situation=str_replace("/"," > ",$situation);
 
echo '<p>';
//liste("./test" );
liste($repertoire);
echo '</p>';
?>
<p>&nbsp;</p>


Simplement elle liste les dossiers présents et en fait un lien qui pointe vers la page rub_photos-aff.php avec comme variable dossier=$lien (déterminé dnas la page) :

Citation :

[/<a href="index.php?rub=photos_aff&amp;dossier='.$lien.'">'.ucfirst($fichier).'</a>quote]
La page rub_photos_aff.php en question :
[quote]<p align="center" class="gdtitre">Photos</p>
<hr /><br />
<p>&nbsp;</p>
 
<?
$lien=$_GET['lien'];
echo '<p>Voilà la liste des photos : '.$lien.'</p>';
 
// START OF PARAMETERS SECTION
$columns=4;                  //number of images per line  
$ratio=5;                    //ratio imageSize / thumbnailImageSize  
$quality=5;                  //thumbnail image quality (0: worst to 100:best)
$scriptname= "test.php";    //filename of this script  
$thumb_dir = "thumb";        //directory created to stored small images
$thumb_prefix = "thumb_";    //prefix for generated images
// END OF PARAMETERS SECTION
 
echo  "<center>\n<P><BR><BR>\n\n";
 
if (isset($_GET['dossier'])){$dossier=$_GET['dossier'];} elseif (empty($dossier)){$dossier='.';}
//$dossier="photos/2007e/Manu/13%20-%20Le%20voyage%20vers%20l'ouest/13_1%20-%20LiJeng/";
 
$mydirectory=$dossier;          //directory in which images are fetched  
$counter=0;
$nbfiles = 0;
$currfile =  "";
$filestab[0] =  "";
 
$handle=opendir($mydirectory);
 
//create a directory for thumbnail images
if (! is_dir($thumb_dir))
{
   mkdir($thumb_dir, 0777);
}
 
while ($currfile = readdir($handle))  
{
   // We get the extension of the current file and keep only image files  
   $extension= strtolower(substr( strrchr( $currfile,  "." ), 1 ));  
   if ($extension== "gif" || $extension== "jpg" || $extension== "jpeg" ||
       $extension== "png" )
   {
   $nbfiles++;
      $currfile = trim($currfile);
      $filestab[$nbfiles] = $currfile;
 
      if ($ishome ==  "" )
      {
         $size = GetImageSize($currfile);
         $width = $size[0] / $ratio;
         $height = $size[1] / $ratio;
         $format = $size[2]; //1 = GIF, 2 = JPG, 3 = PNG, 5 = PSD, 6 = BMP
 
         $currthumbfile = "./" . $thumb_dir . "/" . $thumb_prefix . $currfile;
         if (! file_exists($currthumbfile))
         {
             //GIF format is not supported anymore by GD lib...
             if ($format == 2) //JPG
                   $im = imagecreatefromjpeg($currfile);
             else if ($format == 3) //PNG
                   $im = imagecreatefrompng($currfile);
             if (!$im)
             {
                 $currthumbfile = $currfile;
             }
             else
             {    
                Imagejpeg($im, $currthumbfile, $quality);
                ImageDestroy($im);
             }
          }
 
          $currfile = str_replace(" ","%20",$currfile); // Allow filenames with space characters
          $currthumbfile = str_replace(" ","%20",$currthumbfile); // Allow filenames with space characters
 
          echo  "<A HREF=$scriptname?ishome=1&filename=$currfile&filenumber=$nbfiles>\n";
          echo  "<IMG SRC=$currthumbfile WIDTH=$width HEIGHT=$height";
          $currfile = str_replace("%20"," ",$currfile); // Clean display of filenames with space characters
          echo " alt=\"Enlarge $currfile\">\n";
          $currfile = str_replace(" ","%20",$currfile);   //Clean display of filenames with space characters
          echo  "</A>\n";
          $counter++;
          if ($counter == $columns)
          {
             $counter = 0;
             echo  "<P><P><BR>";
         }
      }
   }
}
closedir($handle);
 
if ($ishome == 1)
{
   echo  "<P>\n";
   $filename = str_replace(" ","%20",$filename);   // Allow filenames with space characters
   $filename = stripslashes($filename);   // Allow filenames with ' characters
   echo  "<IMG SRC=$filename>\n";
   $display = str_replace("%20"," ",$filename);   // Clean display of filenames with space characters
   echo "<br><b> $display </b><br>";
   echo  "<P><BR>\n\n";
 
   if ($filenumber != 1)
   {
      $prevnumber = $filenumber - 1;
      $filestab[$prevnumber] = str_replace(" ","%20",$filestab[$prevnumber]);   // Allow filenames with space characters
      echo  "[<A HREF=$scriptname?ishome=1&filename=$filestab[$prevnumber]&filenumber=$prevnumber>";
      echo  " << Previous</A>]  \n";
   }
 
   echo  " &nbsp;&nbsp;[<A HREF=$scriptname>Main Page</A>]&nbsp;&nbsp;\n";
   echo  "  \n" ;
   if ($filenumber != $nbfiles)
   {
 
      $nextnumber = $filenumber + 1;
      $filestab[$nextnumber] = str_replace(" ","%20",$filestab[$nextnumber]);   // Allow filenames with space characters
      echo  "[<A HREF=$scriptname?ishome=1&filename=$filestab[$nextnumber]&filenumber=$nextnumber>";
      echo  "Next >></A>]\n";
   }
 
   echo "\n\n";
}
?>


Donc elle doit faire des miniatures des photos du dossier ouvert mais il y a un problème je crois qu'elle travaille en racine au lieu de la faire dans le dossier... Enfin j'ai ce message d'erreur :

Citation :

Warning: getimagesize(100_1647.JPG) [function.getimagesize]: failed to open stream: No such file or directory in /mnt/167/sdb/8/d/amitienw/rub_photos_aff.php on line 50


 
Merci beaucoup de votre aide, je ne trouve pas quoi corriger...


Message édité par Gakman le 01-10-2007 à 23:48:41

---------------
-> http://gakman.free.fr
Reply

Marsh Posté le 01-10-2007 à 23:46:02   

Reply

Marsh Posté le 02-10-2007 à 11:31:23    

Si ton "Imagejpeg" reçoit un nom de fichier sans indication de dossier alors il va créer l'image dans le dossier courant (et c'est normal)
Si tu veux qu'il cré l'image dans un dossier, il faut lui indiquer en même temps que le nom du fichier, ce qui donne un truc du genre "./mondossier/monimage.jpg" que je te laisses adapter ton code comme il faut.

Reply

Marsh Posté le 02-10-2007 à 19:09:53    

Merci de ta réponse.
J'ai essayé de faire ça :
if (isset($_GET['dossier'])){$dossier=$_GET['dossier'];} elseif (empty($dossier)){$dossier='.';}  
 
$mydirectory=$dossier;          //directory in which images are fetched  
 
La page est ouverte avec comme variable dossier="photos/2007e/Manu/dossier choisi";  
Mais visiblement dans l'exécution du code cette variable directory n'est pas maintenanue, il cherche en racine les images. Mais le message d'erreur met le bon nom des fichiers (donc les trouve) mais dit qu'il ne peut pas les afficher car il ne trouve pas le fichier (car après l'avoir trouvé il semble le chercher en racine).
Le message d'erreur affiche : "getimagesize(100_1647.JPG)" -> le nom de l'image est bon donc, il a trouvé l'image. Mais après il écrit "failed to open stream: No such file or directory"...
Bref il me manque quelque chose mais je ne trouve pas où !!!
 
Merci de votre aide ;) !


Message édité par Gakman le 02-10-2007 à 19:16:00
Reply

Marsh Posté le 02-10-2007 à 22:02:27    

C'est peut-être à cause de l'espace dans le nom du dossier. Il faudrait faire un  essai en plaçant une image dans un endroit où le chemin d'accès ne comporte pas d'espace.

Reply

Marsh Posté le 03-10-2007 à 10:57:02    

Heu, là, ça n'est plus à la création de la miniature mais à la lecture du fichier d'origine que ça plante.
Quand t'accèdes à un fichier, il faut toujours lui dire où il est. Si tu réfléchis bien avec "getimagesize(100_1647.JPG)", il connait le nom du fichier, mais a part ça, il doit le prendre dans quel répertoire? C'est pas par ce que t'as cherché des noms du fichier plus haut dans le script que tous les fichiers que tu chercheras à ouvrir sont censé y être (dans ton cas si mais c'est un cas particulier). Après tout, le fichier peut très bien être dans un autre répertoire. Par exemple si t'as une image qui te sert de tampon que tu rajoutes sur toutes tes images, il y a peu de chance qu'elle soit dans le répertoire de tes nouvelles images. En plus, s'il y a eu plusieurs recherches, voire même plusieurs recherches imbriquées, (pour manipuler toutes les images d'un répertoire et de ses sous répertoire par exemple) comment elle pourrait savoir à quelle recherche le fichier qu'on veut lui indiquer correspond?  
 
En résumé, quelque soit la fonction où tu donnes le nom d'un fichier pour le manipuler, il faut indiquer également là où il se trouve et si on lui indique pas, il cherchera dans le répertoire courant.

Reply

Marsh Posté le 03-10-2007 à 14:58:31    

Pour le nom des dossiers, j'ai renommé pour qu'il n'y ai plus d'espace ou de caractères spéciaux. Le problème ersiste.
Alors pour l'emplacement des images j'ai essayé de définir avec $dossier le chemin où est l'image mais je n'y arrive pas... Je ne sais pas où le faire ! Je sais que $dossier (ou $mydirectory) pointent le bon dossier, mais je n'arrive pas placer cette variable (du type $currfile=$dossier.$currfile je pense ?).
 
Merci beaucoup, je patauge !  :sweat:  

Reply

Marsh Posté le 06-10-2007 à 00:26:16    

Si jamauis vous voyez où je dois corriger, se serait sympa de me l'indiquer. Meri encore !

Reply

Marsh Posté le 04-11-2007 à 11:53:30    

Je ne trouve pas la solution :'( .
J'ai essayé d'ajouter $dossier.$currfile à la place de $currfile mais ça ne marche pas...
 
Merci de votre aide ! :-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed