Lister des dossier en PHP

[Fermé]
Signaler
-
 trabi11fr -
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

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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

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.
Messages postés
1039
Date d'inscription
vendredi 16 novembre 2007
Statut
Contributeur
Dernière intervention
27 mars 2019
138
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.
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
Messages postés
1039
Date d'inscription
vendredi 16 novembre 2007
Statut
Contributeur
Dernière intervention
27 mars 2019
138
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.

@+
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
Messages postés
1039
Date d'inscription
vendredi 16 novembre 2007
Statut
Contributeur
Dernière intervention
27 mars 2019
138
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.

@+
En attendant merci pour ton aide.

A+