Page 1 sur 1

besoin d'aide pour lister des dossiers

Posté : 14 déc. 2007, 21:47
par lkaiman
Bonjour
Je voudrais votre aide pour m'indiquer si cette fonction peut lister des dossiers dans un tableau, elle peut lister des fichiers, mais avant de faire ceci il me faut lister les dossiers.
Aurais-je louper une fonction pour lister les dossier ? ou est-ce que j'ai fait une erreur !!!
$tab_dir = array();
$nbr_dir = 0;
$handle_dir = opendir("../../../images/transferts"); // Chemin du dossier transfert

while ( false !== ($directory = @readdir($handle)) )
{	
	// Vérifications de l'extension du fichier
	if (  $directory!="." && $directory!=".." && is_dir($directory)  )
	{ 
		$tab_dir[$nbr_img]=$directory;		// Listing des dossiers dans un tableau
		$nbr_dir++; // Incrémentation du nb de dossier
	}
}
merci d'avance

Posté : 14 déc. 2007, 23:34
par h0_noMan
Quelle est l'erreur ou le comportement anormal ?

Enleves le @devant tes fonctions pour voir les messages d'erreurs.

Posté : 15 déc. 2007, 01:46
par Ryle
Même remarque que h0_noMan, l'opérateur de silence "@" est une véritable plaie pour le développement. Cacher les erreurs n'a jamais été une solution de perennité...

Mais ton problème ne vient pas de là, il vient de ton test avec la fonction is_dir().

En effet, tu as beau être dans une boucle qui parcours les éléments d'un dossier, ta fonction is_dir() n'est absolument pas concernée par le $handle_dir que tu as utilisé. Elle va donc vérifier s'il existe un dossier dont le nom est $directory par rapport au seul dossier qu'elle connait, c'est à dire celui où s'exécute le script.

Pour corriger ça, il te suffit de spécifier le chemin du dossier dans lequel se trouve l'élément à tester :
if ( ... && is_dir("../../../images/transferts/" . $directory) )

Posté : 15 déc. 2007, 12:14
par lkaiman
Voici l'erreur après avoir suivis vos conseils.

Code : Tout sélectionner

Warning: readdir(): supplied argument is not a valid Directory resource in /mnt/125/sda/e/1/lkaiman.hedgehogman/test/pages/activites/transferts/album.php on line 117
ligne 117= while ( false !== ($directory = readdir($handle)) )
// listing de tous les dossiers
$tab_dir = array();
$nbr_dir = 0;
$handle_dir = opendir("../../../images/transferts"); // Chemin du dossier transfert

while ( false !== ($directory = readdir($handle)) )
{	
	// Vérifications de l'extension du fichier
	if (  $directory!="." && $directory!=".." && is_dir("../../../images/transferts/".$directory) )
	{ 
		$tab_dir[$nbr_dir] = $directory;		// Listing des dossiers dans un tableau
		$nbr_dir++; // Incrémentation du nb de dossier
	}
}
En faite le $tab_dir ne se rempli pas, donc je ne peux rien récupérer derriere

Posté : 15 déc. 2007, 13:51
par Ryle
Le message d'erreur t'indique que l'argument passé à readdir() n'est pas une ressource valide... et pour cause :) :
$handle_dir = opendir("../../../images/transferts"); // Chemin du dossier transfert

while ( false !== ($directory = readdir($handle)) )

Posté : 15 déc. 2007, 14:20
par lkaiman
waouw, une belle erreur d'inattention

sauf que çà fait le même résultat, cad aucun
je vous montre le reste de mon code et le lien de ma page test (faite STOP au bout de quelques secondes car çà ne fini pas...)

Page de test: album.php
<?php
// listing de tous les dossiers
$tab_dir = array();
$nbr_dir = 0;
$handle_dir = opendir("../../../images/transferts"); // Chemin du dossier transfert

while ( false !== ($directory = readdir($handle_dir)) )
{	
	// Vérifications de l'extension du fichier
	if (  $directory!="." && $directory!=".." && is_dir("../../../images/transferts/".$directory) )
	{ 
		$tab_dir[$nbr_dir] = $directory;		// Listing des dossiers dans un tableau
		$nbr_dir++; // Incrémentation du nb de dossier
	}
}
closedir($handle_dir);
?>

<form method="post">
<table width="200">
   <tr>
   	<?php
	for ($i=0, $col=0 ; $i=$nbr_dir ; $i++, $col++)
	{ // affichage de la premiére image de chaque dossier avec un BP de formulaire radio
	echo "<td valign='middle'>";
		echo "<label><img src='../../../images/transferts/".$tab_dir[$i]."/".$tab_dir[$i]."_00.jpg' alt='' width='200' border='0' />";
		echo "<input type='radio' name='choix_album' value='".$i."' /></label>";
	echo "</td>";
	
		if ($col=3) // Toute les 3 cases(colonne), on crée une nouvelle ligne
		{
			echo "</tr>";
			echo "<tr>";
			$col=0;
		}
	}
	?>
	<td><input name="choix_dossier_envoye" id="choix_dossier_envoye" value="Choisissez votre album" /></td>
   </tr>
</table>
</form>

Posté : 15 déc. 2007, 14:46
par Berzemus
il me semble voir une belle boucle infinie la..

cette condition sera toujours vraie..
$i=$nbr_dir 
essaye $i<!$nbr_dir

Posté : 15 déc. 2007, 15:15
par lkaiman
coool

merci de vos réponses pour mes erreurs bêtes
çà marche, une ptite rectification sur le bouton de retour album et se sera bon :P

çà me donne des idées de galerie, c cool

PS: Si vous voulez l'algo de la recherche d'album, puis recherche de photos a l'affichage des photos, dites le ;)