代码之家  ›  专栏  ›  技术社区  ›  CLiown

php从目录中获取文件列表(在moodle中)

  •  2
  • CLiown  · 技术社区  · 14 年前

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

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

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

    5 回复  |  直到 14 年前
        1
  •  2
  •   Roberto Aloi    14 年前

    从您的标签列表中,我假设您使用的是moodle,您只需使用:

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

    函数包含在 moodlelib.php .

    阅读文档:

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

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

    文件内容的读取功能也可以在 菲利普PHP .

        2
  •  2
  •   Pascal MARTIN    14 年前

    解决办法是 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();
    
        3
  •  2
  •   Sagi    14 年前

    只需使用内置函数 scandir :

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

    所以你可以这样使用它:

    $array = scandir($imagesdir);
    

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

    也可以删除点文件:

    $array = array_diff(scandir($imagesdir), array('.', '..'));
    
        4
  •  1
  •   Ben Rowe    14 年前

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

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

    如果以后还需要筛选,下面是最短的解决方案:

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

    php自动排除 . ..

    如果不需要所有文件,也可以指定自己的掩码,如上图所示 *.* php还自动创建 $files 为你准备。

    最后一行还可以是:

    $files[]=$file;