Скопируйте все содержимое одного каталога в другой, используя php - PullRequest
131 голосов
/ 12 января 2010

Я попытался скопировать все содержимое каталога в другое место, используя

copy ("old_location/*.*","new_location/");

, но он говорит, что не может найти поток, true *.* не найден.

Любое другоеway

Спасибо, Дейв

Ответы [ 13 ]

1 голос
/ 11 января 2018

Я клонирую весь каталог с помощью SPL Directory Iterator.

function recursiveCopy($source, $destination)
{
    if (!file_exists($destination)) {
        mkdir($destination);
    }

    $splFileInfoArr = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

    foreach ($splFileInfoArr as $fullPath => $splFileinfo) {
        //skip . ..
        if (in_array($splFileinfo->getBasename(), [".", ".."])) {
            continue;
        }
        //get relative path of source file or folder
        $path = str_replace($source, "", $splFileinfo->getPathname());

        if ($splFileinfo->isDir()) {
            mkdir($destination . "/" . $path);
        } else {
        copy($fullPath, $destination . "/" . $path);
        }
    }
}
#calling the function
recursiveCopy(__DIR__ . "/source", __DIR__ . "/destination");
0 голосов
/ 24 октября 2018

Для серверов Linux вам просто нужна одна строка кода для рекурсивного копирования при сохранении разрешения:

exec('cp -a '.$source.' '.$dest);

Другой способ сделать это:

mkdir($dest);
foreach ($iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST) as $item)
{
    if ($item->isDir())
        mkdir($dest.DIRECTORY_SEPARATOR.$iterator->getSubPathName());
    else
        copy($item, $dest.DIRECTORY_SEPARATOR.$iterator->getSubPathName());
}

, но он медленнее и делаетне сохранять разрешения.

0 голосов
/ 11 июля 2018
// using exec

function rCopy($directory, $destination)
{

    $command = sprintf('cp -r %s/* %s', $directory, $destination);

    exec($command);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...