8768 sujets

Développement web côté serveur, CMS

Bonjour,
Je suis en train de faire une galerie photos.
Je scan le contenu de mon répertoire albums qui est sur mon ftp. Ce répertoire contient des photos et des répertoires contenant eux même des photos.
Lorsque je scan mon répertoire je fais en sorte d'enregistrer dans ma base de données les informations sur le contenu.

J’ai donc créé un table IWgalerie pour récupérer le nom des répertoires et sous répertoires trouvés lors du scan --> sa fonctionne

J’ai créé une table IWgaleriephotos pour récupérer les noms des photos qui se trouve dans les répertoires.
--> Problème : je n'arrive à récupérer dans que le nom de photos qui se trouve dans le répertoire source (images) et pas celles qui sont dans les sous répertoires.

J’ai retourné le code dans tous les sens mais je ne trouve pas la solution à mon problème et c'est pour ça que je viens vous voir.

Pourriez vous regarder mon code pour me dire d'ou vient mon problème ?
Merci par avance.


voici le code :



<?php 

// Fonction pour parcourir les dossiers 
function lireDossier($dir_nom) 
{ 
    $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant 
    $fichier= array(); // on déclare le tableau contenant le nom des fichiers 
    $dossier= array(); // on déclare le tableau contenant le nom des dossiers 

    while($element = readdir($dir)) 
	{ 
        if($element != '.' && $element != '..') 		
		{ 
            if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;} 
            else {$dossier[] = $element;} 
        } 
    } 
	
    closedir($dir); 
    return array('dossier'=>$dossier,'fichier'=>$fichier); 
} 


$dir_nom = (isset($_GET['dir'])) ? $_GET['dir'] : '../images'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point') 
$nom_rep = basename($dir_nom); // affiche le repertoire dans lequel la page est.

// Récupérations des infos sur le dossier racine. 
$infosDossier = lireDossier($dir_nom); 
$dossier = $infosDossier['dossier']; 
$fichier = $infosDossier['fichier']; 

if(!empty($dossier)) 
{ 
    sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant 
    echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n"; 
    echo "<br/>";
	

        foreach($dossier as $lien)
		{ 
            // Récupération des infos sur un sous dossier 
            $infosSousDossier=lireDossier($dir_nom.'/'.$lien); 
            // Pour choisir aléatoirement une de ses images 
            shuffle($infosSousDossier['fichier']); 
            // ATTENTION : Je n'ai pas traité le cas des sous dossiers vides 			
            echo '
			<div class="col400panocerf">
			<a href="test-galerie.php?dir='.$dir_nom.'/'.$lien.'">
			<img width="100px" height="100px" src="'.$dir_nom.'/'.$lien.'/'.$infosSousDossier['fichier'][0].'"/>
			</a>
			<a href="test-galerie.php?dir='.$dir_nom.'/'.$lien.'">'.$lien.'</a><br/>';
			
			
		$sql = 'SELECT * FROM IWgalerie'; 
		$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error()); 
		while($data = mysql_fetch_array($req)) 
		{ 
			
			if($lien == $data['repertoire'])
			{
			 echo  '' .$data['desc']. '<br/>';
			
			}
		}
		
		echo '</div>'; 
		
        } 
    echo "<br/>"; 
}

echo "<div class='clear20px'></div>";
if(!empty($fichier))
{ 
    sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant 
		
    echo "
	<h1>Vous êtes dans la galerie  <span class='gris'>".$nom_rep."</span> </h1>
	Liste des images accessibles dans '$dir_nom' :<br/>"; 
        foreach($fichier as $lien) 
		{ 
        $size = GetImageSize("$dir_nom/$lien");            


			//Largeur maximale de l'image pour la cr&eacute;ation des miniatures  
			$largeur_maxi = 100; 
			$hauteur_maxi = 100;  
			if ($size[0] > $largeur_maxi)  
				{  
					$width = $largeur_maxi;  
					$theight = ($size[0]/$largeur_maxi);  
					$height = ($size[1]/$theight);  
				} 	 
			else  
				{  
					//Sinon on garde la taille originale  
					$width = $size[0]; $height = $size[1];  
				}  
				
				// Verification de l'extension d'image
				 $ext = strtolower(substr($lien, strrpos($lien, '.') + 1));
				 if (($ext=="jpg") || ($ext=="jpeg") || ($ext=="gif") || ($ext=="bmp") || ($ext=="png")) 
				 {
				  // Lien vers l'image
			
					echo "			 
					<div class='highslide-gallery'>
					<ul>
					<li><a href=\"$dir_nom/$lien \" class=\"highslide\" onclick=\"return hs.expand(this)\">
					<img src=\"$dir_nom/$lien \" width=".$width." height=".$height." alt=\"Photo des Vosges : $lien\" title=\"Photo des Vosges : $lien\"/>
					</a>
					</li>";
					echo "
					<div class='highslide-caption'>
					".$lien." taille : " .$size[0]. " X  " .$size[1]. "
					</div>
					</ul>
					</div>"; 
				}	
		} 
			echo ""; 
		}//foreach($fichier as $lien) 









//insertion des noms de répertoires dans la base de données : si un nom existe déjà on ajoute pas.

foreach($dossier as $d)	
{
// $d étant le nom du répertoire et pas un Array [cligne]
$sql = 'SELECT COUNT(id) as nb FROM IWgalerie WHERE repertoire = "'.$d.'"';
$sql = mysql_query($sql) or die(mysql_error());
$nb = mysql_fetch_object($sql);

if($nb->nb == 0) 
{
   $sql = "INSERT INTO IWgalerie (id, repertoire) VALUES('','$d')"; mysql_query($sql) or die('Erreur SQL !'.$sql.' '.mysql_error()); 
}
else 
{
    echo $d. 'existe déjà';
}
}

echo '<br/>';


//insertion des noms de photos dans la base de données : si un nom existe déjà on ajoute pas.

foreach($fichier as $f)	
{
// $f étant le nom de la photo et pas un Array [cligne]
$sql = 'SELECT COUNT(id) as nbp FROM IWgaleriephoto WHERE photo = "'.$f.'"';
$sql = mysql_query($sql) or die(mysql_error());
$nbp = mysql_fetch_object($sql);

if($nbp->nbp == 0) 
{
   $sql = "INSERT INTO IWgaleriephoto (id, photo) VALUES('','$f')"; mysql_query($sql) or die('Erreur SQL !'.$sql.' '.mysql_error()); 
}
else 
{
    echo $f. 'existe déjà';
}
}

mysql_close(); 
?> 



vous voyez le code que j'ai mis ? (chez moi il disparait une seconde apres l'ouverture du topic)
Modifié par fabrice88 (19 Jul 2009 - 21:50)
Oui pareil pour moi je ne vois pas ton code dans la page (seulement dans la source).
Lire du php avec des "&lt" et autres signes est un peu difficile donc je te mets l'algorithme à utiliser.


taFonction() {
  // un peu de code

  //arrivé au moment de scanner les sous-dossiers et les fichiers
  if(isSousDossier() === true) // C'est un sous-dossier
  {
     taFonction() // on rappelle la même fonction, cf. algorithme récursif
  }
  else
  {
     // on continue comme ci de rien était
  }

  // un peu de code

La fonction récursive devrait lister le dossier, prendre les images qui se trouve à l'intérieur et si elle rencontre un sous-dossier elle se re-exécute dans ce sous-dossier. Elle listera le sous-dossier, prendra les images et si elle rencontre un sous-dossier...

Après pour différencier un sous-dossier et une photo, il y a sûrement un fonction en php pour ça (is_dir() ?) ou bien une photo aura une extension (ou un mime-type) et pas un dossier.