2010-12-17 95 views
0

我正在使用此代码来递归拷贝目录(和文件)。我不明白为什么,但是,复制后,我的$源文件夹增加了...它有76.3MB,复制后它将增加到123 MB!任何理想?PHP:递归副本

<?php 

class MyDirectory { 

    public function copy($source, $destination, $directoryPermission = 0755, $filePermission = 0644) { 
     $source = $this->addSlash($source); 
     $destination = $this->addSlash($destination); 
     $directoryIterator = new DirectoryIterator($source); 

     if (!file_exists($destination)) { 
      mkdir($destination, $directoryPermission); 
     } 

     foreach ($directoryIterator as $fileInfo) { 
      $filePath = $fileInfo->getPathname(); 
      $newDestination = str_replace($source, $destination, $filePath); 

      if (!$fileInfo->isDot()) { 
       if ($fileInfo->isFile()) { 
        copy($filePath, $newDestination); 
        chmod($newDestination, $filePermission); 
       } else if ($fileInfo->isDir()) { 
        mkdir($newDestination, $directoryPermission); 
        $this->copy($filePath, $newDestination); 
       } 
      } 
     } 
    } 

    private function addSlash($directory) { 
     if (!empty($directory)) { 
      if (!preg_match('/\/$/', $directory)) { 
       $directory .= '/'; 
      } 

      return $directory; 
     } 
    } 

} 

更新:没有显着性差异来增加源的大小!

$ diff -rq mag/ copy-mag/ 
Only in mag//app/etc: local.xml 

谢谢。

+1

没有冒犯,但:它的目的地,而不是命运:) – erenon 2010-12-17 11:53:59

+0

我想补充说,这是一个坏主意,创建推断目标目录与str_replace。如果路径的一部分重复,则会被拧紧。 – Evert 2010-12-17 11:59:15

+0

谢谢你......我解决了这个问题...... – thom 2010-12-17 11:59:31

回答

0

从源代码中推断出现了什么问题是非常困难的。

改为分析目录,比较差异,并用结果更新您的问题。您可以使用像Beyond Compare这样的工具(商业版,但是30天的试用版)来找出问题所在。

+3

或在* nix上使用diff。 – erenon 2010-12-17 11:55:09

+0

diff -rq dirA dirB? – thom 2010-12-17 11:56:46