2015-11-03 22 views
2
文件夹/子文件夹的

我使用这个代码来获得一个剧目的每一个文件夹/子文件夹的列表:上市与RecursiveDirectoryIterator

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

但是它会显示这样的事情,至极添加点或双点和显示文件夹两次:

C:\ wamp \ www \ gg \ ftp \ repository \ user \ mister。

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:\ WAMP \ WWW \ GG \ FTP \库\用户\老总\ vvxcv \ vcxvcx ..

,而不是其他清洁剂这样的:

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

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

C:\瓦帕\ WWW \ GG \ ftp的\库\ user \ mister \ vvxcv

C:\ WAMP \ WWW \ GG \ FTP \库\用户\老总\ vvxcv \ vcxvcx

有没有办法?我以前使用glob的功能

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

这是正确显示文件夹,但我无法得到它是递归到藏汉显示子文件夹。

感谢

+0

我相信'.'和'..'实际上被认为是目录,父目录。从递归函数中删除名为'.'和'..'的目录 –

+0

是的,这也是我的想法,但在我的文件夹中没有这样的目录,glob函数没有显示它们:/ – apatik

+0

在linux中,它们是在那里肯定和在一个Windows命令外壳,你可以通过执行一个'CD ..'到父目录! –

回答

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将是将被探索的文件夹名称。

所以,这些文件夹

ABC

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

,并在循环中,每个A B and C$sub传递给检查或者它有更多的folders在它或不。

+0

这样做的工作。谢谢 !我可以问你这个功能是如何工作的吗?为什么scanDirectory在这一端以及$ sub在你的代码中的作用是什么? (在我的代码中,这个变量与上下文无关,我只是忘记删除它) – apatik

+0

@apatik:更新了我的答案 – Mubin

+0

谢谢你的帮助!所以如果我对这个功能的理解是正确的,那么每次scanDirectory找到一个新文件夹时,$文件夹的值被新文件夹擦除,对吗?我试图做的是让这个函数比较用户所在的目录库中的每个$文件夹,如果匹配则会回显一些html。这可能需要它自己的线程。无论如何,非常感谢您的帮助,真的很有帮助! – apatik