begin process at 2012 02 12 03:19:09
  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 :21 832

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

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151
TROUVER LES DOUBLONS DANS UNE LISTE DE FICHIERS par soobook

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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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,811 sec (3)

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