Клонировать / скопировать каталог по назначению - PullRequest
0 голосов
/ 24 января 2019

Прежде всего, я искал и перепробовал множество функций, но все они работают, копируя все содержимое (не всю папку с собственным источником) из моего исходного каталога в место назначения.

Но я хочу скопировать ВЕСЬ СПРАВОЧНИК.

ЧТО Я ПОПРОБОВАЛ?

Эта функция копирует содержимое папки копия из $source в папку Новая копия места назначения $dest.

$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;

}

НА ЧТО Я ИЩУ?

Он должен скопировать весь мой каталог copy (вместе со всеми его файлами и подпапками) в папку назначения Таким образом, в конечном итоге каталог назначения должен выглядеть следующим образом:

C: \ MAMP \ htdocs \ projectAuru \ our / files / New Copy / copy

1 Ответ

0 голосов
/ 24 января 2019

Решение этой проблемы состоит в том, чтобы получить имя папки, которую мы копируем, и 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);                      
            }
...