克隆目录/将目录复制到目标

时间:2019-01-24 16:25:49

标签: php directory copy clone

首先,我搜索并尝试了许多功能,但是所有功能都可以通过将源目录中的所有内容(而不是整个源文件夹)复制到目标位置来实现。

但是我想复制整个目录。

我尝试过什么?

此功能将$source的文件夹 copy 的内容复制到目标$dest的文件夹 New Copy

$source = 'C:\MAMP\htdocs\projectAuru\our/files/copy';
$dest   = 'C:\MAMP\htdocs\projectAuru\our/files/New Copy';

function xcopy($source, $dest, $permissions = 0777)
{
    // Check for symlinks
    if (is_link($source)) {
        return symlink(readlink($source), $dest);
    }

    // Simple copy for a file
    if (is_file($source)) {
        return copy($source, $dest);
    }

    // Make destination directory
    if (!is_dir($dest)) {
        mkdir($dest, $permissions);
    }

    // Loop through the folder
    $dir = dir($source);
    while (false !== $entry = $dir->read()) {
        // Skip pointers
        if ($entry == '.' || $entry == '..') {
            continue;
        }

        // Deep copy directories
        xcopy("$source/$entry", "$dest/$entry", $permissions);
    }

    // Clean up
    $dir->close();
    return true;

}

我正在寻找什么?

它应该将我的整个目录副本(连同其所有文件和子文件夹)复制到目标文件夹,因此最终目标目录应如下所示:

  

C:\ MAMP \ htdocs \ projectAuru \ our / files / New Copy / 副本

1 个答案:

答案 0 :(得分:0)

解决方案是在复制文件夹中获取我们正在复制的文件夹的名称和具有该名称的mkdir,然后将所有文件复制到该mkdir目标。

             // Get value after last slash and trim trailing slash if exists
            $copyFromFolderName = substr(rtrim($copyFrom, '/'), strrpos(rtrim($copyFrom, '/'), '/') + 1);
            if (!is_dir($base.$copyTo.'/'.$copyFromFolderName)) {
                mkdir($base.$copyTo.'/'.$copyFromFolderName, 0777, true);
                xcopy($base.$copyFrom, $base.$copyTo.'/'.$copyFromFolderName);                      
            }else{
                xcopy($base.$copyFrom, $base.$copyTo.'/'.$copyFromFolderName);                      
            }