递归复制文件和文件夹以及子文件夹

时间:2012-11-29 20:33:45

标签: php codeigniter

我正在使用我写的功能来复制目录和文件。它只复制目录和文件一次。如果文件不存在,如何将文件从源文件夹复制到目标文件夹?

这是功能。基本上我想将analyst_uploads中的文件夹labref及其内容复制到第二个文件夹store_for_issue。如果文件在同一天上载到源文件夹,则应将文件复制到目标文件夹“store_for_issue”。创建文件夹(如果不存在)或更新内容

   public  function full_copy(  ) {
      $labref=  $this->uri->segment(3);     
      $source='analyst_uploads/'.date('Y').'/'.date('M').'/'.$labref;
      $newfolder='store_for_issue';
      if(is_dir($newfolder)){
          mkdir($newfolder.'/'.$labref,0777,TRUE);
      }
      $target=$newfolder.'/'.$labref.'/';
      copy( $source, $target );

}

2 个答案:

答案 0 :(得分:1)

这个怎么样:

public  function full_copy(  ) {
      $labref=  $this->uri->segment(3);     
      $source='analyst_uploads/'.date('Y').'/'.date('M').'/'.$labref;
      $newfolder='store_for_issue';
      if(!is_dir($newfolder)){
          mkdir($newfolder.'/'.$labref,0777,TRUE);
      }
      $target=$newfolder.'/'.$labref.'/';
      shell_exec('cp -ur '. $source . ' ' . $target);
}

这使用linux cp -ur并且只复制目标目录中不存在的文件,或者替换目标目录中比源文件旧的文件。它将以递归方式运行。

当然,如果你想要一个只有PHP的解决方案,你可以使用RecursiveDirectoryIterator或类似的方法来遍历源目录中的所有文件,并逐个比较/复制它们。

答案 1 :(得分:0)

if (!file_exists($target)) {
   copy( $source, $target );
}