2010-12-17 17 views
0

私はこのコードを使用して、ディレクトリ(およびファイル)の再帰コピーを作成しています。私は理由を理解することができませんが、コピー後、私の$ソースフォルダが増加...それは76.3メガバイト、コピー後に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

+0

str_replaceで目的地のディレクトリを推論するのは悪い考えです。パスの一部が繰り返されると、あなたは戸惑います。 – Evert

+0

ありがとうございました...私はそれを修正しました... – thom

答えて

0

ソースコードから何がうまくいかないかを推測するのは非常に難しいです。

代わりにディレクトリを分析し、相違点を比較し、質問を結果に更新します。 Beyond Compare(市販されていますが、30日間の試用可能)のようなツールを使用して、何がうまくいかなかったかを知ることができます。

+3

またはdiff on * nixを使用してください。 – erenon

+0

diff -rq dirA dirB? – thom