2009-10-24 4 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 클래스 사용할 수 있습니다 http://www.php.net/manual/en/class.recursivedirectoryiterator.php에서 도난

$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"; 
} 

예, 그리고 원하는대로 그것을 수용.

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(".."); 
} 

그냥 객체에이 정적 기능을 삽입하고 전화 :

+0

위 코드는 로컬 폴더에서 잘 작동합니다. ftp 폴더를 찾아 보도록하려면 먼저 curlftpfs를 사용하여 로컬로 마운트하십시오. – witkacy26

-1

는 다음과 같은 코드를 사용할 수 있습니다

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

희망이 도움이 당신이나 다른 사람.

관련 문제