2010-02-25 6 views

Répondre

2

Depuis de votre liste de tags Je suppose que vous utilisez Moodle, vous pouvez simplement utiliser le:

function get_directory_list($rootdir, $excludefiles='', $descend=true, $getdirs=false, $getfiles=true) 

La fonction est contenue dans moodlelib.php.

lecture de la doc:

  • Retourne un tableau avec tous les noms de fichiers dans * tous les sous-répertoires, par rapport au rootdir donné.

S'il vous plaît se référer au document officiel pour plus d'informations sur les paramètres facultatifs.

Les fonctions de lecture du contenu des fichiers sont également disponibles en filelib.php.

2

Une solution consisterait à utiliser opendir + readdir + closedir(citer, par exemple, à partir de la première page):

$imagesdir = $CFG->dataroot.'/1/themeimages/'; 
if ($handle = opendir($imagesdir)) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != "..") { 
      echo "$file\n"; 
     } 
    } 
    closedir($handle); 
} 


Une autre solution consisterait à utiliser the [DirectoryIterator class; citant l'exemple de] 4 la __construct page:

$imagesdir = $CFG->dataroot.'/1/themeimages/'; 
$dir = new DirectoryIterator($imagesdir); 
foreach ($dir as $fileinfo) { 
    if (!$fileinfo->isDot()) { 
     var_dump($fileinfo->getFilename()); 
    } 
} 


Bien sûr, dans chaque cas, au lieu de simplement l'écho ou le dumping le nom du fichier, il vous faudrait le mettre dans un tableau.

Cela signifie initialisant le tableau avant que la boucle:

$list_files = array(); 

Et, à l'intérieur de la boucle, utilisez quelque chose comme l'une de ces deux lignes, en fonction de la solution choisie:

$list_files[] = $file; 
$list_files[] = $fileinfo->getFilename(); 
+0

Moodle offre une fonction de bibliothèque pour cela. Pas besoin de réinventer la roue. –

2

Il suffit d'utiliser la fonction intégrée scandir:

Renvoie un tableau de fichiers et de répertoires fr om le répertoire.

Donc, vous l'utiliser comme ceci:

$array = scandir($imagesdir); 

Bien sûr, vous pouvez utiliser DirectoryIterator aussi, mais ce qui est beaucoup plus simple.

Vous pouvez aussi supprimer des fichiers de points:

$array = array_diff(scandir($imagesdir), array('.', '..')); 
+0

+1. glob() est également une option, bien plus riche en fonctionnalités, et probablement moins performant http://php.net/glob –

1

Pour une approche plus OO utiliser la classe DirectoryIterator.

$images = array(); 
$imagesdir = $CFG->dataroot.'/1/themeimages/'; 
foreach (new DirectoryIterator($imagesdir) as $file) { 
    if($file->isDot()) continue; 
    $images[] = $file; 
} 
+0

S'il vous plaît être conscient lors de l'attribution d'une valeur « actuelle » DirectoryIterator à un tableau comme ça. Quand vous venez à faire quelque chose avec le tableau $ images, tous ses éléments seront les mêmes DirectoryIterator pointant vers au-delà du dernier élément (et donc entièrement inutile). C'est un comportement attendu (bien que regrettable). Heureusement, il y a une solution rapide: assurez-vous de "cloner" le fichier $ lors de l'assignation au tableau. – salathe

1

est ici la plus courte solution si vous avez aussi besoin d'un filtre plus tard:

$imagesdir = $CFG->dataroot.'/1/themeimages/*.*'; 
foreach (glob($imagesdir) as $file) 
    array_push($files,$file); 

php exclut automatiquement . et ..

vous pouvez également spécifier votre propre masque si vous n'avez pas besoin Php crée également automatiquement le tableau $files pour vous.

la dernière ligne peut aussi être:

$files[]=$file;