使用RecursiveDirectoryIterator

时间:2015-11-03 20:46:19

标签: php

我使用此代码获取了一个剧目的每个文件夹/子文件夹的列表:

$path = realpath($userdir);
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
{
        echo "$filename\n";
}

然而,它会显示如下内容,添加点或双点并显示文件夹两次:

  

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\ ..先生

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ apatik

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ apatik ..

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ vvxcv

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ vvxcv ..

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ vvxcv \ vcxvcx

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ vvxcv \ vcxvcx ..

而不是像这样清洁的东西:

  

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ apatik

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ vvxcv

     

C:\瓦帕\ WWW \ GG \ ftp的\库\用户\先生\ vvxcv \ vcxvcx

有办法吗?我之前使用的是函数glob

glob($sub . '/*' , GLOB_ONLYDIR);

正确显示文件夹,但我无法递归显示子文件夹。

由于

1 个答案:

答案 0 :(得分:2)

你需要这样的东西

set_time_limit(0);
function scanDirectory($sub = ''){
    $folders = glob($sub . '/*' , GLOB_ONLYDIR);
    foreach($folders as $folder){
        echo "$folder<br />";
        scanDirectory($folder);
    }
}
scanDirectory();

这将列出当前驱动器上的所有文件夹

修改

$folders = glob($sub . '/*' , GLOB_ONLYDIR);将获取指定目录中的所有文件夹。

foreach($folders as $folder)将遍历folders数组。

$sub将是将要探索的文件夹名称。

所以,这些是文件夹

  

A B C

$folders会有$folders['A', 'B', 'C']

并在循环中,每个A B and C将作为$sub传递,以检查其中是否包含更多folders