2009-10-24 146 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); 

希望这有助于你或其他人。