PHP从目录中获取文件列表(在Moodle中)

时间:2010-02-25 21:10:32

标签: php moodle

我想打开一个目录并阅读其中的所有文件并将它们放入array,到目前为止我有:

$imagesdir = $CFG->dataroot.'/1/themeimages/';

这给了我目录的路径,下一步是什么?

5 个答案:

答案 0 :(得分:2)

解决方案是使用opendir + readdir + closedir (引用第一页中的示例)

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


另一种解决方案是使用the [DirectoryIterator class;引用4 __construct页面中的示例:

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


当然,在每种情况下,您不必只是回显或转储文件的名称,而是必须将其放入数组中。

这意味着在循环之前初始化数组:

$list_files = array();

并且,在循环内部,使用类似于这两行中的一行,具体取决于您选择的解决方案:

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

答案 1 :(得分:2)

只需使用内置函数scandir

  

从目录中返回文件和目录的数组。

所以你会像这样使用它:

$array = scandir($imagesdir);

当然你也可以使用DirectoryIterator,但这更简单。

您还可以删除点文件:

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

答案 2 :(得分:2)

因为从你的标签列表中我假设你正在使用Moodle,你可以简单地使用:

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

该功能包含在 moodlelib.php

阅读文档:

  
      
  • 返回包含所有内容的数组   *所有子目录中的文件名,   相对于给定的rootdir。
  •   

有关可选参数的详细信息,请参阅官方文档。

filelib.php 中也提供了读取文件内容的功能。

答案 3 :(得分:1)

对于更多面向对象的方法,请使用DirectoryIterator类。

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

答案 4 :(得分:1)

如果您以后还需要过滤器,这是最短的解决方案:

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

php会自动排除...

如果您不需要所有文件,也可以指定自己的面具,如上面*.*所示 php还会自动为您创建$files数组。

最后一行也可以是:

$files[]=$file;