首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >目录的递归副本

目录的递归副本
EN

Stack Overflow用户
提问于 2011-04-19 03:25:16
回答 12查看 51.8K关注 0票数 25

在我的旧VPS上,我使用以下代码将目录中的文件和目录复制到一个新目录中,该目录是在用户提交表单后创建的。

代码语言:javascript
复制
function copyr($source, $dest)
{
   // Simple copy for a file
   if (is_file($source)) {
      return copy($source, $dest);
   }

   // Make destination directory
   if (!is_dir($dest)) {
      mkdir($dest);
      $company = ($_POST['company']);
   }

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

      // Deep copy directories
      if ($dest !== "$source/$entry") {
         copyr("$source/$entry", "$dest/$entry");
      }
   }

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

copyr('Template/MemberPages', "Members/$company")

然而,现在在我的新VPS上,它将只创建主目录,但不会将任何文件复制到其中。我不明白两个VPS之间会发生什么变化?

EN

回答 12

Stack Overflow用户

发布于 2011-10-15 13:22:15

尝试如下所示:

代码语言:javascript
复制
$source = "dir/dir/dir";
$dest= "dest/dir";

mkdir($dest, 0755);
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());
  }
}

迭代器遍历所有文件夹和子文件夹,并将文件从$source复制到$dest

票数 82
EN

Stack Overflow用户

发布于 2011-04-19 03:27:30

我可以建议(假设它是一个*nix )你只需要对cp -r做一个系统调用,然后让它为你做拷贝。

票数 15
EN

Stack Overflow用户

发布于 2012-08-14 15:49:02

我更改了Joseph的代码(如下所示),因为它对我不起作用。这就是工作原理:

代码语言:javascript
复制
function cpy($source, $dest){
    if(is_dir($source)) {
        $dir_handle=opendir($source);
        while($file=readdir($dir_handle)){
            if($file!="." && $file!=".."){
                if(is_dir($source."/".$file)){
                    if(!is_dir($dest."/".$file)){
                        mkdir($dest."/".$file);
                    }
                    cpy($source."/".$file, $dest."/".$file);
                } else {
                    copy($source."/".$file, $dest."/".$file);
                }
            }
        }
        closedir($dir_handle);
    } else {
        copy($source, $dest);
    }
}

在创建目录之前编辑添加的测试(第7行)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5707806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档