Lister des dossier en PHP

Fermé
trabi11fr - 2 juin 2011 à 15:21
 trabi11fr - 4 juin 2011 à 21:08
Bonjour,
Voici mon problème:
J'ai un répertoire "albums" contenant des sous-répertoires A1, A2, A3,..... B1,B2,B3....etc..
Dans ces sous-répertoires il y 1 fichier .txt et des fichiers .jpg.
Dans certains sous-répertoires, il n'y a pas de fichiers .jpg
Le but:
je veux créer un tableau (<table>) dont une cellule affiche les noms des dossiers commençant par la lettre A, la suivante ceux commençant avec la lettre B, etc...
Jusque là je sais faire.
Voici mon code:
<?php
$rep = "albums/";
$dir = opendir($rep);
while ($dossier = readdir($dir)) {
if(is_dir($rep.$dossier)) {

if ($dossier != '.' && $dossier != '..' && $dossier{0}=='A'){

echo $dossier."<br>";
}}}
closedir($dir);
?>

Le problème:
je voudrais que si le dossier ne contient qu'un fichier .txt (pas de .jpg), son nom ne s'affiche pas dans la liste. Et là, je coince.:-(((
Si quelq'un a la solution....
Merci d'avance
A voir également:

6 réponses

salut;
pour chacun de tes $rep.$dossier tu fait dans ta boucle while et condition if:
if(count(glob($rep.$dossier."*.txt")) === 0 )
// tu fait ton traitement ici
1
Merci pour ta réponse, mais ça ne fonctionne pas.:-(((
J'ai essayé toutes les variantes possible, mais soit tout les répertoires s'affichent, soit aucun.
Je voudrais que s'affichent uniquement les répertoires contenant des fichiers .jpg.

voici ce que j'ai essayé:

<?php
$rep = "albums/";
$dir = opendir($rep);
while ($dossier = readdir($dir)) {
if(is_dir($rep.$dossier)) {
if ($dossier != '.' && $dossier != '..' && $dossier{0}=='A'){
if(count(glob($rep.$dossier."*.jpg")) !== 0 )

echo $dossier."<br>";
}}} }
closedir($dir);
?>

ou encore

<?php
$rep = "albums/";
$dir = opendir($rep);
while ($dossier = readdir($dir)) {
if(is_dir($rep.$dossier)) {
if(count(glob($rep.$dossier."*.jpg")) !== 0 )
if ($dossier != '.' && $dossier != '..' && $dossier{0}=='A'){
echo $dossier."<br>";
}}} }
closedir($dir);
?>

Rien ne fonctionne....

Merci pour ton aide.
0
rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
3 juin 2011 à 13:16
Bonjour,

Moi j'irai plus vers la fonction substr().
qui va extraire une chaine de caractère différent de "txt" (donc égal à "jpg")

if (substr( $dossier, -3, 3) == "jpg" ) {
echo $dossier;
}

pour plus d'info sur substr : http://www.manuelphp.com/php/function.substr.php

@+


Mieux vaut paraitre 'CON' 5mn, que de le rester toute sa vie.
0
Merci pour aide à tous les deux.
Mais je crois que vous "oublié" un détail (désolé:-))
Mon arborescence est la suivante:
albums/dossier1/texte.txt
albums/dossier1/photo1.jpg
albums/dossier1/photo2.jpg
albums/dossier1/photo3.jpg

albums/dossier2/texte.txt

albums/dossier3/texte.txt
albums/dossier3/photo1.jpg
albums/dossier3/photo2.jpg
albums/dossier3/photo3.jpg

et la liste que je veux obtenir c'est:

dossier1
dossier3

sans dossier 2, puisque celui-ci ne contient pas de photos.

Je pense que vos deux solutions
if(count(glob($rep.$dossier."*.jpg")) !== 0 )
ou
if (substr( $dossier, -3, 3) == "jpg" )

peuvent fonctionner à condition d'arriver à lire le contenu des sous-repertoires dossier1, dossier2, dossier3 pour savoir si ils contiennent des .jpg. Si oui on affiche le dossier dans (pas les fichiers qu'il contient) dans la liste.
Cette liste de dossier est en fait un sommaire donnant accés à l'album qui affichera les photos contenues dans le dossier correspondant.
Je ne sais pas si je me fait bien comprendre.

Donc enfait il faudrait que ce soit:
if(count(glob($rep.$dossier.$photo."*.jpg")) !== 0 )
ou
if (substr( $photo, -3, 3) == "jpg" )

Et tout le problème est que je ne sais pas comment obtenir $photo.;-((((((

Merci
0
rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
3 juin 2011 à 21:10
Bonsoir,

Je me suis amusé à créer une petite fonction qui va permettre de réaliser ce que tu souhaites faire, à toi de l'améliorer.

<?php
function parcourir_repertoire($repertoire)
{
$le_repertoire = opendir($repertoire) ;
while($fichier = @readdir($le_repertoire))
{
if ($fichier == "." || $fichier == "..") continue;

if (is_dir($repertoire.'/'.$fichier)) {
parcourir_repertoire($repertoire.'/'.$fichier);
}
else {
if (substr( $fichier, -3, 3) == "jpg") {
echo $repertoire.'/'.$fichier."<br />";
}
}

}
closedir($le_repertoire);
}
parcourir_repertoire('albums');
?>


J'espère que ça va t'avancer un peu.

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

Merci rescue, grace à ton code j'ai pu faire un truc qui approche ce que je veux faire. Voicile code que j'ai bidouillé à partir du tien:

<?php
$rep = "albums/";
$dir = opendir($rep);
while ($dossier = readdir($dir)) {

if ($dossier != '.' && $dossier != '..' && $dossier[0]=='A'){
if(is_dir($rep.$dossier)) {
$sousdir = opendir($rep.$dossier);
while ($fiche = readdir($sousdir)) {
if (substr($fiche,-3) == "jpg") {
echo $dossier."<br>";
}}}}}
closedir($dir);
?>

Le seul problème qu'il me reste, c'est qu'il m'affiche autant de fois le nom du répertoire ($dossier) qu'il y a de fichiers .jpg ($fiche) dans celui-ci.

N'y a-t-il pas une fonction identique à GROUP BY en Mysql pour que le nom ne s'affiche qu'une seul fois?
J'ai pas mal cherché sur internet sans rien trouver.;-(((
bon, je ne suis pas très doué en php.........

Merci d'avance et bon dimanche à tous
0
rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
4 juin 2011 à 20:20
Bonsoir,

Cela doit être possible, mais pour le moment je n'ai aucune d'idée.
Il va falloir réfléchir plus consciencieusement.
A moins qu'une autre personne de la communauté trouve la solution.

@+
0
En attendant merci pour ton aide.

A+
0