2012-05-03 56 views
0

所以我試圖做一個功能,使一個文件夾和所有內容(與子文件夾)的本地副本,並將副本發送到遠程服務器,本地副本是好的,但FTP副本沒有格式化它應該的方式。他們都擁有所有文件,但ftp版本沒有正確格式化文件結構。我看,但無法找到任何帖子與這個問題,所以任何指針會有所幫助。文件結構問題,從PHP的FTP。

實施例:正確


  • 子1分2分3分4分
      • 4 - 1
      • 4 - 2

但是,這是我所得到的,

  • 主要
    • 分4
      • 子0F 4 - 1
        • 子0F 4 - 2
          • 子3
            • 子2
              • 子1
這裏是鱈魚e:

function copyr($source, $dest, $conId) { 
    $sourceName = explode('/',$dest); 
    $sourceName = $sourceName[count($sourceName)-1]; 

    // copy file 
    if (is_file($source)) { 
     $upLink = ftp_fput($conId, $sourceName, fopen($source, 'r'), FTP_ASCII); 
     return copy($source, $dest); 
    } 
    // Make destination directory 
    if (!is_dir($dest)) { 
     mkdir($dest); 
     ftp_mkdir($conId, $sourceName); 
     ftp_chdir($conId, $sourceName); 
    } else if(is_dir($dest)){ // go to one that has been made. 
     ftp_chdir($conId, $sourceName); 
    } 
    // Loop the folder 
    $dir = dir($source); 
    while (false !== $entry = $dir->read()) { 
     // Skip pointers 
     if ($entry == '.' || $entry == '..') { 
      continue; 
     } 
     // Copy sub directories 
     if ($dest !== "$source/$entry") { 
      copyr("$source/$entry", "$dest/$entry", $conId, $entry); 
     } 
    } 
    // Clean up 
    $dir->close(); 
    return true; 
} 
$source = 'images'; 
$dest = 'NewImages'; 
if(copyr($source, $dest, $conId)){ 
    echo "It's finished .... Good."; 
} else { 
    echo "Failed ... "; 
} 
ftp_close($conId); 

這是我從php.net複製的其他部分,在查看ftp的.net手冊後放在一起。

謝謝。

+1

遞歸。就這些。 –

+0

嗯,我明白了,但我不確定爲什麼該結構在本地副本上是正確的,但不是遠程副本。 – webLacky3rdClass

+0

哦,我現在看到... –

回答

0

從遞歸返回後,您忘記退出目錄(例如cd ..)。

+0

我該如何動態地做到這一點?如果我強迫它將頂部的所有文件夾放在頂層Dir中。 – webLacky3rdClass

+0

你是否在腳本中看到了你遞歸的部分? –