2011-10-29 191 views
1

我想遞歸搜索子目錄的任何目錄內的所有子目錄的目錄。基本上所有文件夾都從根目錄開始,我需要將文件複製到找到的所有文件夾以及主根文件夾中。我怎樣才能做到這一點?遞歸在目錄中搜索所有文件夾路徑

這是我到目前爲止,但它需要完全遞歸,以便它獲取該根目錄中的所有文件夾,以及文件夾內的文件夾和文件夾中的文件夾,直到沒有更多的文件夾。 。

@copy($extendVars['dir'] . '/index.php', $real_extendpath . '/index.php'); 

$dh = @opendir($real_extendpath); 
while (false !== ($obj = readdir($dh))) 
{ 
    if ($obj == '.' || $obj == '..') 
     continue; 

    if (is_dir($real_extendpath . '/' . $obj)) 
     @copy($extendVars['dir'] . '/index.php', $real_extendpath . '/' . $obj . '/index.php'); 
} 

closedir($dh); 
+2

你需要使用一個函數來調用它遞歸。 – str

+0

好的,但如何?我沒有辦法做到這一點。除了使用readdir之外,還有更好的方法嗎?不是像某種RecursiveIterator函數嗎?這會更好嗎?如果是這樣,如何使用該功能對我來說也是棘手的... – SoLoGHoST

+1

該手冊充滿了實踐。 http://www.php.net/manual/en/function.scandir.php#105891 - 此外'RecursiveDirectoryIterator' – mario

回答

9

遞歸整個文件系統只對目錄可以超輕鬆使用從標準PHP庫的RecursiveDirectoryIterator和朋友(docs)。

一個基本的例子看起來像

$directories = new RecursiveIteratorIterator(
    new ParentIterator(new RecursiveDirectoryIterator($directory_to_iterate)), 
    RecursiveIteratorIterator::SELF_FIRST); 

foreach ($directories as $directory) { 
    // Do your work here 
} 

爲您的特定需求,// Do your work here可以像下面的代碼段一樣簡單。

copy($extendedVars['dir'] . '/index.php', $directory . '/index.php'); 
+0

謝謝,非常有用! :) – SoLoGHoST

+0

你救了我的一天... thax –

相關問題