2012-11-14 145 views
0
function copy_directory($source, $destination) { 
    if (is_dir($source)) { 
     @mkdir($destination); 
     $directory = dir($source); 
     while (FALSE !== ($readdirectory = $directory->read())) { 
      if ($readdirectory == '.' || $readdirectory == '..') { 
       continue; 
      } 
      $PathDir = $source . '/' . $readdirectory; 
      if (is_dir($PathDir)) { 
       copy_directory($PathDir, $destination . '/' . $readdirectory); 
       continue; 
      } 
      copy($PathDir, $destination . '/' . $readdirectory); 
     } 

     $directory->close(); 
    }else { 
     copy($source, $destination); 
    } 
} 

這是我的腳本,用於將整個目錄和文件複製到另一個目標。但我有個小問題複製遞歸文件和文件夾,但跳過父項

我的文件夾都是這樣:

cinch.v2.1.1\cinch\cinch\other folders and files 
loopy.v2.1.3\loopy\loopy\other folders and files 
musy.v3.1.4\musy\musy\other folders and files 
... 

我需要複製剛剛過去的(深度3)不在話下,與子文件夾和文件,而不是整體結構糊塗,musy文件夾。如何更改腳本。

及複印件結構應該是這樣的:

cinch\other folders and files 
loopy\other folders and files 
musy\other folders and files 

我開始

if (strpos($readdirectory, '.') === false && strpos($readdirectory, '_') === false) { 

但這不工作,因爲它必須。

回答

1

你必須首先尋找3級目錄,然後將這些複製到你的目的地:

function copy_directory(...) { 
... 
} 

function copy_depth_dirs($source, $destination $level) 
{ 
    $dir = dir($source); 
    while (($entry = $dir->read()) !== FALSE) { 
     if ($entry != '.' && $entry != '..' && is_dir($entry)) { 
      if ($level == 0) { 
       copy_directory($source . '/' . $entry, $destination); 
      } else { 
       copy_depth_dirs($source . '/' . $entry, $destination, $level - 1); 
      } 
     } 
    } 
} 

copy_depth_dirs('cinch.v2.1.1', $destination, 3); 
+0

謝謝你,但你可以複製整體的一部分。如果我使用if($ last_entry!== FALSE){copy($ PathDir,$ destination。'/'。$ readdirectory);在循環之外,沒有任何東西被複制 – senzacionale

+0

@senzacionale 1.你當然必須檢查'is_dir()'和2.使用'$ last_entry',因爲在while循環之後'$ readdirectory'是FALSE。 –

+0

嗯mabye你沒有正確理解我。我需要將所有子目錄和文件夾的最後一個目錄複製爲第3層。對不起,如果我不夠清楚。我更新我的問題。 – senzacionale

相關問題