2015-11-03 21 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