2011-10-29 132 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 –

相关问题