2

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

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

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

4

5 回答 5

2

由于从您的标签列表中我假设您正在使用 Moodle,您可以简单地使用:

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

该函数包含在moodlelib.php中。

从文档中读取:

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

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

filelib.php中还提供了读取文件内容的函数。

于 2010-03-01T10:19:26.400 回答
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);
}


另一种解决方案是[DirectoryIterator 使用;引用来自] 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();
于 2010-02-25T21:12:00.123 回答
2

只需使用内置函数scandir

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

所以你会像这样使用它:

$array = scandir($imagesdir);

当然,您也可以使用 DirectoryIterator,但这要简单得多。

您还可以剥离点文件:

$array = array_diff(scandir($imagesdir), array('.', '..'));
于 2010-02-25T21:16:02.220 回答
1

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

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

php 自动排除...

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

最后一行也可以是:

$files[]=$file;
于 2010-02-25T21:28:11.760 回答
1

对于更多 OO 方法,请使用 DirectoryIterator 类。

$images = array();
$imagesdir = $CFG->dataroot.'/1/themeimages/';
foreach (new DirectoryIterator($imagesdir) as $file) {
   if($file->isDot()) continue;
   $images[] = $file;
}
于 2010-02-25T21:17:32.363 回答