PHP递归复制目录到单个目录

时间:2016-04-07 20:02:39

标签: php recursion

在PHP中,我希望以递归方式将目录及其子目录中的所有文件复制到没有子目录的单个目录

e.g。

... /目录/ subdir1 / file1.pdf

... /目录/ subdir1 / file2.pdf

... /目录/ subdir2 / file3.pdf

... /目录/ subdir2 / file4.pdf

应该成为:

... / NEWDIR / file1.pdf

... / NEWDIR / file2.pdf

... / NEWDIR / file3.pdf

... / NEWDIR / file4.pdf

即。没有' subdir'水平了。

我正在使用这个PHP代码,它会复制所有文件,但它保留了不需要的子目录:

<?php
$src = "/dir/";
$dst = "/newdir/";

function recurse_copy($src,$dst) { 
    $dir = opendir($src); 
    @mkdir($dst); 
    while(false !== ( $file = readdir($dir)) ) { 
        if (( $file != '.' ) && ( $file != '..' )) { 
            if ( is_dir($src . '/' . $file) ) { 
                recurse_copy($src . '/' . $file,$dst . '/' . $file); 
            } 
            else { 
                copy($src . '/' . $file,$dst . '/' . $file); 
            } 
        } 
    } 
    closedir($dir); 
} 

recurse_copy($src,$dst);

echo "<H3>Copy Paste completed!</H3>"; //output when done
?>

1 个答案:

答案 0 :(得分:0)

当文件是目录时,您为目标参数传递了错误的值。如果你想要一个平面目录结构,它应该只是:

recurse_copy($src . '/' . $file, $dst);

而不是:

recurse_copy($src . '/' . $file, $dst . '/' . $file);