2009-10-24 257 views
1

以下代碼的工作原理可以讓我可以成功地遞歸下載目錄。但是,我想下載這個目錄中的目錄。所以,當它連接它。在。目錄是一個子目錄「In」。我想遞歸地檢索In目錄中的內容。目錄名稱本身將會改變,所以我不能指定腳本本身的內容......任何人都知道如何做到這一點?PHP - FTP子目錄遞歸?

ftp_sync ("./In/");  
ftp_close($conn_id); 

function ftp_sync ($dir) { 

    global $conn_id; 

    if ($dir != ".") { 
     if (ftp_chdir($conn_id, $dir) == false) { 
      echo ("Change Dir Failed: $dir<BR>\r\n"); 
      return; 
     } 
     if (!(is_dir($dir))) 
      mkdir($dir); 
     chdir ($dir); 
    } 

    $contents = ftp_nlist($conn_id, "./In/"); 
    foreach ($contents as $file) { 

     if ($file == '.' || $file == '..') 
      continue; 

     if (@ftp_chdir($conn_id, $file)) { 
      ftp_chdir ($conn_id, ".."); 
      ftp_sync ($file); 
     } 
     else 
      ftp_get($conn_id, $file, $file, FTP_BINARY); 
    } 

    ftp_chdir ($conn_id, ".."); 
    chdir (".."); 

} 

回答

3

您可以使用RecursiveDirectoryIterator類:

$ite=new RecursiveDirectoryIterator("/path/"); 

$bytestotal=0; 
$nbfiles=0; 
foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) { 
    $filesize=$cur->getSize(); 
    $bytestotal+=$filesize; 
    $nbfiles++; 
    echo "$filename => $filesize\n"; 
} 

來自實例http://www.php.net/manual/en/class.recursivedirectoryiterator.php被盜,並適應自己的喜好。

+0

上面的代碼在本地文件夾上很好地工作。爲了讓它瀏覽ftp文件夾,首先用curlftpfs在本地安裝它們。 – witkacy26 2016-03-03 22:08:14

-1

您可以使用下面的代碼:

public static function download($local_dir, $remote_dir, $ftp_conn) { 

    if ($remote_dir != ".") { 
     if (ftp_chdir($ftp_conn, $remote_dir) == false) { 
      echo ("Change Dir Failed: $remote_dir \n"); 
      return; 
     } 
     if (!(is_dir($remote_dir)) ){ 
      mkdir($remote_dir); 
      echo "-> Folder created: ".$remote_dir." \n"; 
     } 

     chdir($remote_dir); 
    } 

    $contents = ftp_nlist($ftp_conn, "."); 


    foreach ($contents as $file) { 

     if ($file == '.' || $file == '..') continue; 

     if (@ftp_chdir($ftp_conn, $file)) { 
      ftp_chdir($ftp_conn, ".."); 
      ftpmanager::download($local_dir."/".$file, $file, $ftp_conn); 
     } 
     else { 
      echo "----> path for local file: "."$local_dir/$file"." \n"; 
      echo "----> path for remote file: ".$file." \n"; 
      ftp_get($ftp_conn, "$local_dir/$file", "$file", FTP_BINARY); 
      echo "-> Downloaded file: ".$local_dir."/".$file." \n"; 
     } 

    } 

    ftp_chdir($ftp_conn, ".."); 
    chdir(".."); 
} 

中的對象只需插入這個靜態函數,並調用它:

myobject::download($sBackUpFullCurrentPath, '.', $rConnection); 

希望這有助於你或其他人。