Lister un repertoire [Résolu]

Signaler
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020
-
Messages postés
3643
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020
-
Bonjour,
J'aimerais lister un dossier j'ai trouvé ce code sur un forum

<?php
function list_dir($name) {
if ($dir = opendir($name)) {
while($file = readdir($dir)) {
echo "$file\n";
if(is_dir($file) && !in_array($file, array(".",".."))) {
list_dir($file);
}
}
closedir($dir);
}
}
list_dir(".")
?>

Je l'ai vu enfaite pour la premiere fois ::j'ai d'abord lu les explications pour en comprendre,par contre j'ai pas trouvé tous les explications.
J'aimerais que quelqu'un m'aide à comprendre
Le gag
si $dir est le chemin
mon script php se trouve dans le dossier (Ex:essaie)
Rps du script

/*
.
..
soleil.png
lune.png
  • /

pourquoi $file m'affiche (..)par la suite s'il n'est pas entré dans un sous dossier pour afficher les fichier?
Mon autre question:
L'objectif enfaite c'etait d'uploader un fichier
move_uploaded_file()
J'ai d'abord deplacé le fichier et par la suite stocké son nom en base de données
ce que je veux c'est generer un compteur pour chaque fichier envoyé via le formulaire
je voudrais compter le nombre de fichier qui se trouve dans le dossier pour enfaire une boucle.
1.png,2.png
J'aimerais savoir comment je peux le faire?
Merçi de votre aide

4 réponses

Messages postés
29819
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 octobre 2020
2 872
Bonjour
Je n'ai pas tout compris à ton explication..
Pourquoi vouloir les nommer 1.jpeg 2 ...3...
Il serait plus simple de générer des noms unique (en utilisant la fonction uniqid() par exemple )
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020

Merçi pour votre réponse je vais en chercher d'avantage sur cette fonction
Messages postés
3643
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020
971
Bonjour,

Les répertoires « factices » « . » et « .. » seront toujours retournés par la fonction readdir.
Si tu ne veux pas les afficher, tu peux utiliser la même technique que pour la récurrence de ton code : remplacer
echo "$file\n";
par
if (!in_array($file, array(".",".."))) echo "$file\n";


Xavier
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020

Ok,si j'ai bien compris Reivax962 "." et ".." n'existe pas vraiment dans le repertoire c'est pour cela si j'ai fait ceci
if(in_array($file,array(" . ", " .. "))
{
}

Ça m'affiche une erreur!
Messages postés
3643
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020
971 >
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020

Alors de façon générale, « ça m'affiche une erreur » sans dire qu'elle est l'erreur, c'est pas très efficace pour recevoir de l'aide ;)
Messages postés
12727
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708
bonjour, suggestion pour compter le nombre de fichiers:
$nombre=0;
while($file = readdir($dir)) {
   if( ! is_dir($file)  ) {
      $nombre = $nombre + 1 ;
   }
}
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020
>
Messages postés
29819
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 octobre 2020

Si un utilisateur se desinscrit sur mon site je devrais aussi supprimer ses données?(simple conseil)
Pour l'uniq id je l'ai fait mais j'aimerais comprendre cette partie de l'explication
https://www.php.net/manual/fr/function.uniqid.php

Avertissement
Cette fonction ne garantie pas l'unicité des valeurs de retour. Car la plupart des systèmes ajustent l'horloge système par NTP ou similaire; l'horloge système est modifié constament.
Messages postés
12727
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708 >
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020

il est possible, exceptionnellement, que la fonction retourne une valeur déjà retournée précédemment. il est donc prudent de vérifier que la valeur n'est pas encore utilisée.
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020
>
Messages postés
12727
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020

il est possible, exceptionnellement, que la fonction retourne une valeur déjà retournée précédemment. il est donc prudent de vérifier que la valeur n'est pas encore utilisée.
Oui ça j'ai compris il ne garantie pas l'unicité en retour à une forte probalité à moins qu'on active bool $more_entropy=true;
Ce que j'ai pas compris exactement c'est ça:
Car la plupart des systèmes ajustent l'horloge système par NTP ou similaire; l'horloge système est modifié constament.
Messages postés
12727
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708 >
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020

les systèmes utilisent des techniques comme le protocole NTP pour connaitre l'heure exacte, et ajustent leur horloge en fonction, il est donc possible que la fonction soit appelée deux fois "au même moment", ce qui risque de donner deux fois le même résultat.
Messages postés
3643
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020
971 >
Messages postés
12727
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020

Pour préciser, la fonction uniqid se base largement sur l'heure courante (en microsecondes) pour renvoyer son résultat.
Donc, si l'horloge de l'ordinateur revient en arrière de quelques millisecondes suite à une resynchronisation, on peut très bien « repasser » par la même microseconde.
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020

Merçi encore pour vos réponse,s'i y a toujours quelques chose à me faire comprendre de plus j'attends vos réponse,avant de mettre en résolu

Cordialement