1

以下のコードは、ディレクトリを再帰的に正常にダウンロードできるほど機能します。しかし、このディレクトリ内のディレクトリをダウンロードしたい。だから、それが接続するとき、それはです。以内 。directory はサブディレクトリ "In" です。In ディレクトリ内の内容を再帰的に取得したい。ディレクトリ名自体が変更されるため、スクリプト自体でそれがどうなるかを指定することはできません...誰もこれを行う方法を知っていますか?

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

} 
4

2 に答える 2

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から盗み、好みに合わせて調整します。

于 2009-10-24T01:05:48.913 に答える
-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 );

これがあなたや他の人に役立つことを願っています。

于 2012-03-05T16:18:38.630 に答える