begin process at 2010 03 18 15:54:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > LISTER LE CONTENU D'UN DOSSIER (AVEC SPÉCIFICATION)

LISTER LE CONTENU D'UN DOSSIER (AVEC SPÉCIFICATION)


 Information sur la source

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Niveau :Expert Date de création :28/05/2002 Date de mise à jour :28/05/2002 16:56:12 Vu :20 470

Auteur : Vapula

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

La fonction sert à lister spécifiquement le contenu d'un repertoire en utilisant les extensions.
    all (ou rien de spécifier) : liste tous les fichiers et dossiers
    fichier : liste tous les fichiers
    dossier : liste tous les dossiers
    "extension" : liste tous les fichiers contenant l'extension entrée (sans le point)

Source

  • <?
  • function listRep ($repertoire, $typefichier){
  • //Initialisation des variables
  • $result; //tableau de resultat
  • $cptdossier=0; //cpt pour le tab des dossiers
  • $cptfichier=0; //cpt pour le tab des fichiers
  • $tab_fichier; //tableau de fichiers
  • $tab_dossier; //tableau des dossiers
  • $estfichier; //booleen pour savoir si c'est un fichier
  • $estdossier; //booleen pour savoir si c'est un dossier
  • // test si c'est un repertoire
  • if (!(is_dir($repertoire))){
  • print("Ce n'est pas un repertoire");
  • exit ;
  • }
  • //ouverture du dossier
  • $handle=opendir('.');
  • //lecture du dossier
  • while ($fichier = readdir($handle)){
  • if ($fichier != "." && $fichier != ".."){
  • //Determination du type
  • $estfichier = is_file($repertoire.$fichier);
  • $estdossier = is_dir($repertoire.$fichier);
  • //recup des éléments dans les tableaux respectifs
  • if ($estdossier==true){
  • $tab_dossier[$cptdossier] = $fichier;
  • $cptdossier++;
  • next;
  • }
  • if ($estfichier==true){
  • $tab_fichier[$cptfichier] = $fichier;
  • $cptfichier++;
  • next;
  • }
  • }
  • }
  • //mise en place des resultats
  • // si dossier
  • if ($typefichier=="dossier"){
  • $result = $tab_dossier;
  • }
  • //si fichier
  • if ($typefichier=="fichier"){
  • $result = $tab_fichier;
  • }
  • //tous les types
  • if (($typefichier=="all")||($typefichier=="")){
  • for ($i=0; $i<$cptdossier+1; $i++){
  • $result[$i] = $tab_dossier[$i];
  • }
  • for ($j=0; $j<$cptfichier+1; $j++){
  • $i = $cptdossier+$j+2;
  • $result[$i] = $tab_fichier[$j];
  • }
  • }else{
  • //extension spécifiées
  • $i=0;
  • for ($j=0; $j<$cptfichier+1; $j++){
  • $extension = explode(".", $tab_fichier[$j]);
  • $valmax = count($extension)-1;
  • if ($typefichier==$extension[$valmax]){
  • $result[$i] = $tab_fichier[$j];
  • $i++;
  • }
  • }
  • }
  • //fermeture du dossier
  • closedir($handle);
  • return ($result);
  • }
  • ?>
<?
function listRep ($repertoire, $typefichier){

  //Initialisation des variables
  $result;       //tableau de resultat
  $cptdossier=0; //cpt pour le tab des dossiers
  $cptfichier=0; //cpt pour le tab des fichiers
  $tab_fichier;  //tableau de fichiers
  $tab_dossier;  //tableau des dossiers
  $estfichier;   //booleen pour savoir si c'est un fichier
  $estdossier;   //booleen pour savoir si c'est un dossier

  // test si c'est un repertoire
  if (!(is_dir($repertoire))){
    print("Ce n'est pas un repertoire");
    exit ;
  }

  //ouverture du dossier
  $handle=opendir('.');

  //lecture du dossier
  while ($fichier = readdir($handle)){
    if ($fichier != "." && $fichier != ".."){
      //Determination du type
      $estfichier = is_file($repertoire.$fichier);
      $estdossier = is_dir($repertoire.$fichier);

      //recup des éléments dans les tableaux respectifs
      if ($estdossier==true){
        $tab_dossier[$cptdossier] = $fichier;
        $cptdossier++;
        next;
      }
      if ($estfichier==true){
        $tab_fichier[$cptfichier] = $fichier;
        $cptfichier++;
        next;
      }
    }
  }
  //mise en place des resultats
    // si dossier
  if ($typefichier=="dossier"){
    $result = $tab_dossier;
  }
    //si fichier
  if ($typefichier=="fichier"){
    $result = $tab_fichier;
  }
    //tous les types
  if (($typefichier=="all")||($typefichier=="")){
    for ($i=0; $i<$cptdossier+1; $i++){
      $result[$i] = $tab_dossier[$i];
    }
    for ($j=0; $j<$cptfichier+1; $j++){
      $i = $cptdossier+$j+2;
      $result[$i] = $tab_fichier[$j];
    }
  }else{
    //extension spécifiées
    $i=0;
    for ($j=0; $j<$cptfichier+1; $j++){
      $extension = explode(".", $tab_fichier[$j]);
      $valmax = count($extension)-1;
      if ($typefichier==$extension[$valmax]){
        $result[$i] = $tab_fichier[$j];
        $i++;
      }
    }
  }
  //fermeture du dossier
  closedir($handle);
  return ($result);
}
?>

 Conclusion

pas de bugs rencontré jusqu'à présent  :)


 Sources du même auteur

QUELQUES FONCTIONS PROPRES AU CLASSES
CREATION D'UN CADDIE À L'AIDE D'UNE CLASSE
CONVERSION D'UNE DATE (AAAA/MM/DD)
Source avec Zip DIFFÉRENCE DE DATE
SCINDE UNE URL

 Sources de la même categorie

Source avec Zip EFFACER LES FICHIERS IMAGES ( .PNG ), D'UN RÉPERTOIRE TEMPS ... par christophe0511
COURTE ET SIMPLE FONCTION RÉCURSIVE POUR LECTURE DE RÉPERTOI... par mbdx
Source avec Zip Source avec une capture GESTIONNAIRE DE FICHIERS | MYSQL PHP 5.X {NEMENTON PHP MANA... par Nementon
Source avec Zip Source avec une capture LISTE REPERTOIRE (DIR EN PHP) par mephistope
Source avec Zip LIRE UNIQUEMENT LES X DERNIERS OCTETS D'UN FICHIER DISTANT (... par Equilibrius

Commentaires et avis

Commentaire de OriOn le 29/05/2002 08:21:00 administrateur CS

La prochaine fois évite de cliquer plusieurs fois sur le bouton de submit pour mettre ta source....

Commentaire de Vapula le 29/05/2002 09:20:35

J'ai eu un pb sur ce site hier, c'est pour ca que la source y etait 3 fois ;))

Commentaire de pi0up51 le 29/05/2002 09:43:09

good good ;)

Commentaire de Stan le 05/11/2002 08:23:13


Je te propose quelques optimisations. Ne prends pas mal ce que je vais dire, mais tu vas voir qu'on peut gagner un peu en taille du code et en temps d'execution.

Cordialement,


Stan.
--------------------
1) En une seule ligne... die($message) est fait pour ça ! ;-)

// test si c'est un repertoire
if (!(is_dir($repertoire))){
{
die("Ce n'est pas un repertoire");
     }

--------------------
1) pas la peine de passer par des variables intermédiaires pour les tests... ils peuvent directement aller des les IF()
2) 'next' inutiles
3) is_dir/is_file renvoient TRUE ou FALSE; si tu testes is_dir($machin) == TRUE et que is_dir($machin) renvoie TRUE, ton test revient à demander si TRUE == TRUE (donc inutile) : tu fais juste un IF(is_dir($machin))
Si tu veux vraiment passer par une variable intermédiaire, tu fais
$temporaire = is_dir($machin) ;
IF($temporaire) ...
4) tu peux incrémenter ton compteur directement dans le passage en index du tableau... et hop, une ligne de gagnée !

//lecture du dossier
while ($fichier = readdir($handle))
{
if ($fichier != "." && $fichier != "..")
{
//recup des éléments dans les tableaux respectifs
if (is_dir($repertoire.$fichier))
{
$tab_dossier[$cptdossier++] = $fichier;
         }
if (is_file($repertoire.$fichier))
{
         $tab_fichier[$cptfichier++] = $fichier;
         }
        } // fin while

--------------------
1) Tu peux renvoyer directement le resultat depuis ce test et sortir de ta fonction (ça évite tous les tests suivants qui font perdre du temps d'execution et qui seront de toutes façon FAUX ;-))

//mise en place des resultats
// si dossier
if ($typefichier=="dossier")
{
     RETURN $tab_dossier ;
     }
//si fichier
if ($typefichier=="fichier")
{
        RETURN $tab_fichier ;
     }

--------------------
1) Pour l'extension, y'a encore plus simple : PHP a prévu une fonction native 'pathinfo($fichier)' qui renvoie un tableau associatif dont l'index 'extension' contient l'extension de $fichier (donc plus rapide, surtout si il y a beaucoup de fichiers dans ton répertoire)

$tableau = pathinfo($file) ;
$extension = $tableau['extension'] ;

Commentaire de thedentiste le 03/02/2003 12:00:42

Plus simple encore
avec serveur unix
exec("find path -type f -exec basename {} ;",$list);

Commentaire de dpitard le 11/04/2003 23:40:00

chez moi, ça ne marche pas quand je tente d'accéder à un sous-répertoire.

Voici une version adaptatée qui fonctionne et qui me semble plus efficace (pour n fichier je ne fais que n itérations).

&lt;?
# liste le contenu d'un répertoire
# $typefichier=all: liste tous les répertoires et les fichiers
# $typefichier=fichier: liste tous les fichiers
# $typefichier=dossier: liste tous les dossiers
#
function listRep ($repertoire, $typefichier){
//Initialisation des variables
$result; //tableau de resultat

//valeur all par défaut
if ($typefichier=="")
$typefichier="all";

  // test si c'est un repertoire
  if (!(is_dir($repertoire)))
die("Ce n'est pas un répertoire");

  //ouverture du dossier
  $handle=opendir($repertoire);

$i=0;
  //lecture du dossier
  while ($fichier = readdir($handle)){
    if ($fichier != "." && $fichier != ".."){
      if (is_dir($repertoire.$fichier) && ($typefichier=="all" || $typefichier=="dossier")){
       $result[$i++] = $fichier;
      }
      elseif (is_file($repertoire.$fichier)){
$tmp = pathinfo($fichier) ;
$extension = $tmp['extension'] ;
if ($typefichier=="all" || $typefichier=="fichier" || $typefichier==$extension) {
       $result[$i++] = $fichier;
}
      }
   }
  }
  
//fermeture du dossier
  closedir($handle);
return ($result);
}
?&gt;

Commentaire de aze555666 le 01/10/2004 20:52:51

pour un listage de répertoire, voir aussi code.aspx?id=24147: le code est plus court.

Commentaire de CyberDenix le 07/12/2006 21:16:06

Moi ya une fonction que j'adore, c'est glob.
Parce que glob, c'est glop :)
--------------------------------------------

$array = glob("./classes/*.php");
if ($array)
{
  foreach ($array as $iterator) {
    //do something here;
  }
}

--------------------------------------------

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales