besoin d'aide pour lister des dossiers

Eléphanteau du PHP | 28 Messages

14 déc. 2007, 21:47

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

Eléphant du PHP | 445 Messages

14 déc. 2007, 23:34

Quelle est l'erreur ou le comportement anormal ?

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 déc. 2007, 01:46

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) )
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 28 Messages

15 déc. 2007, 12:14

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 déc. 2007, 13:51

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)) )
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 28 Messages

15 déc. 2007, 14:20

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>

ViPHP
ViPHP | 4039 Messages

15 déc. 2007, 14:46

il me semble voir une belle boucle infinie la..

cette condition sera toujours vraie..
$i=$nbr_dir 
essaye $i<!$nbr_dir
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 28 Messages

15 déc. 2007, 15:15

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 ;)