8792 sujets

Développement web côté serveur, CMS

Bonjour,
Je voulais, si des images existaient dans le dossier, afficher la première, et si le dossier n'existait pas ou était vide afficher une photo par défaut :
$nb_f = 0;
	  $rep = "../annonces/".$Record->id."/"; 
$opdir = @opendir($rep);
while ($c = @readdir($opdir)) 
{
   if (!is_dir($c)) $nb_f++;
}
if ($nb_f > 0) {
echo "<img src=\"../annonces/".$Record->id."/".$c."\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
}
else
{
echo "<img src=\"../images/image.gif\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
}
@closedir($opdir);

En fait ça marche sauf que je croyais trouver le nom du premier fichier dans la variable $c, mais elle semble vide,
Si quelqu'un peut m'aider
Merci d'avance
Modifié par jpsartre (03 Jul 2006 - 19:51)
Qu'est-ce que tu entends par premier fichier ?
Dans l'OS, les fichiers d'un répertoire ne sont pas triés. Rien ne dit que le premier fichier que tu recevras dans la variable sera le premier du point de vue alphabétique. Pour aller plus loin, il n'est peut-être même pas sûr que les fichiers soient trouvés dans le même ordre lors de deux parcours successifs.
En général, les deux premiers éléments reçus sont "." et ".." qui symbolisent respectivement le dossier courant et parent, mais ce n'est pas forcément toujours le cas.

Tu as plusieurs solutions :
- Stocker les noms des fichiers trouvés dans un tableau et trier ce tableau ensuite avec la fonction sort ou similaire.
- Utiliser la fonction glob qui permet quelques options supplémentaires
gambate kudsai Smiley cligne

je n'est pas ajouter de quoi choper l'extensoin ou le nom ou le path ...

puisse te donner des idées :

<?php
$dossier = @opendir("images/monfichier/");
$ok = true; // on n'affichera qu'une image
		while ($fichier = readdir ($dossier) && $ok) {
			if ($fichier != "." && $fichier != ".." && $fichier != "thumb.db") {
				echo  '<img src="'.$fichier.'" alt="" />';
				$ok = false;//on à affiche rnotre "première" image
			}
		}
// sinon on a rien trouver :
if ($ok === true) echo '<img src="images/rien.jpg" alt="" />';

Modifié par Gectou4 (04 Jul 2006 - 03:56)
Merci pour votre aide,
J'ai fait ça mais ça me paraît moins bien que la proposition de Gectou4. J'ai dû mettre les @ devant mes fonctions pour éviter les messages d'erreur :
 $rep = "../annonces/".$Record->id."/";
$dir = @opendir($rep); 
if ($dir) {
while ($f = @readdir($dir)) {
   if(is_file($rep.$f)) {
echo "<img src=\"../annonces/".$Record->id."/".$f."\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />"; 
  break; }
}
}
else
  {
  echo "<img src=\"../images/image.gif\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
  }

Merci encore pour vos conseils
Et à bientôt
J'ai essayé d'adapter ton code parceque le mien c'est vraiment du bricolage. Je suis géné par les @ (pour éviter les messages d'erreur en cas de non-dossier) et les \ un peu partout.
Ton code semble plus net, mais il m'affiche toujours la photo par défaut, je le mets :

  $dossier = @opendir("../annonces/".$Record->id."/"); 
$ok = true; // on n'affichera qu'une image 
        while ($fichier = readdir ($dossier) && $ok) { 
            if ($fichier != "." && $fichier != ".." && $fichier != "thumb.db") { 
                echo  '<img src="'.$fichier.'" alt="photo" />'; 
                $ok = false;//on à affiche rnotre "première" image 
            } 
        } 
// sinon on a rien trouver : 
if ($ok === true) echo '<img src="../images/image.gif" alt="photo" width="60" height="60" class="image" />'; 

Si quelqu'un peut m'aider, plusieurs choses m'échappent dans ce code, les 3x=== dans ($ok === true) et bien d'autres choses encore
Merci
Salut, je peux juste te répondre sur un point, pour le ===. C'est exactement la même chose que ==, mais avec une condition supplémentaire ; les deux variables comparées doivent être en plus du même type pour que le test renvoi true.

Bonne chance pour la suite