Lister des dossier en PHP
trabi11fr
-
trabi11fr -
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
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:
- Lister des dossier en PHP
- Dossier appdata - Guide
- Impossible de supprimer un dossier - Guide
- Dossier rar - Guide
- Mettre un mot de passe sur un dossier - Guide
- Dossier démarrage - Guide
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
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
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.
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
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
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.
@+
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.
@+
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
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
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.