Bonjour à tous!

Je vous explique mon problème: j'essaye de créer une foction qui liste un répertoire, si ce répertoir contient un ou des répertoires elle le(s) listes aussi.

Le but final est d'avoir les fichiers de tous les repertoire contenu dans un array (pour un select).

Maias quand je veut les enregistrer dans mon array, il n'affiche rien pourtant quand je fait un echo, j'ai bien le chemin du fichier en question

Voici mon code:

<?php 
function ScanDirectory($Directory){
  $MyDirectory = opendir($Directory) or die('Erreur');
  //$alowed_doc = array('Saison_1_2006','Saison_2_2007','Saison_3_2008','Saison_4_2009');
  $option = array();
    while($Entry = @readdir($MyDirectory) ) {
        if(is_dir($Directory.'/'.$Entry)){
            if(($Entry != '.') && ($Entry != '..') && ($Entry != 'divers') && ($Entry != 'autres')){

              ScanDirectory($Directory.'/'.$Entry);

            }
        }
        else {
          $allow_ext = array('mp4');
          $ext = strtolower(substr($Entry, -3));
          if(in_array($ext, $allow_ext)){
          $option $Directory.'/'.$Entry] = $Entry ;
        }
        }//endwhile
} //end function
  closedir($MyDirectory);
return $option;
}
?>
<div class="meta-box-item-title">
  <?php $dir = ScanDirectory('../wp-content/uploads');?>
    <h4><?php echo $name; ?></h4>
</div>
<div class="meta-box-item-content">
    <select name="<?php echo $id;?>" id="<?php echo $id;?>">
<?php foreach($dir as $id=>$v): ?>
            <option value="<?php echo $id; ?>" <?php if($id==$value){ echo 'selected'; } ?>><?php echo $v; ?></option>
        <?php endforeach; ?>
    </select><br />
</div>

2 réponses


imagnum3
Auteur
Réponse acceptée

Merci pour m'avoir mit sur la voie :)

J'ai finalement mit la ligne 14 comme ceci :

$option$Entry] = ScanDirectory($Directory.'/'.$Entry);

Cela me creer un Array qui contien les Array des sous dossier jusqu'au fichier finale.

Mon select ressemble à ca maintenant:

<div class="meta-box-item-title">
  <?php $dir = ScanDirectory('../wp-content/uploads/videos');?>
  <pre><?php print_r($dir);?></pre>

    <h4><?php echo $name; ?></h4>
</div>
<div class="meta-box-item-content">
    <select name="<?php echo $id;?>" id="<?php echo $id;?>">

      <?php
        foreach($dir as $id=>$v): 
              if( is_array($v)) { 
                  foreach ($v as $id_array => $v_array) : 
                        if(is_array($v_array)){}
                        else{ ?>
                          <option value="<?php echo $id_array; ?>" <?php if($id_array==$value){ echo 'selected'; } ?>><?php echo $v_array; ?></option>
                        <?php }
                  endforeach;
              }else{ ?>
                 <option value="<?php echo $id; ?>" <?php if($id==$value){ echo 'selected'; } ?>><?php echo $v; ?></option>
              <?php }
        endforeach; ?>

    </select><br />
</div>

Il faut que je l'améliore car pour le moment je scan que 2 sous dossier (seulement ce que j'ai besoin) , il faut que je fasse de la récursivité pour pouvoir faire ça à l'infini.

Je posterai le bout de code pour ceux que ça intéresse.

Merci encore ;)

<?php   

function ScanDirectory($Directory){  

  $MyDirectory = opendir($Directory) or die('Erreur');  
  //$alowed_doc = array('Saison_1_2006','Saison_2_2007','Saison_3_2008','Saison_4_2009');  
  $option = array();  

    while($Entry = @readdir($MyDirectory) ) {  
        if(is_dir($Directory.'/'.$Entry)){  
            if(($Entry != '.') && ($Entry != '..') && ($Entry != 'divers') && ($Entry != 'autres')){  

              $option = ScanDirectory($Directory.'/'.$Entry);  

            }  
        }  
        else {  
          $allow_ext = array('mp4');  
          $ext = strtolower(substr($Entry, -3));  
          if(in_array($ext, $allow_ext)){  
              $option $Directory.'/'.$Entry] = $Entry ;  
          }  
        }
    }

  closedir($MyDirectory);  
return $option;  
}  
?>

je n'ai pas pris le temps de tester ton code avec la modification (ligne 14, ajout de $option =... ) mais essaye quand même.
au pire je crois que grafikart a fait un tutoriel sur la récursivité... va y faire un petit tour au besoin, sans doute qu'il te permettra de corriger/comprendre le problème