PHP - recursively FTP alt?

2 Cevap php

Aşağıdaki kod başarıyla ardışık dizin indirebilirsiniz o kadar ki çalışır. Ama bu dizin içindeki dizinleri indirmek istiyorum. Bağlandığı zaman Yani, öyle. Içinde. dizin alt "In" dir. Ben ardışık olarak dizin içindeki içeriğini almak istiyorum. Dizin adları kendilerini değişecek, bu yüzden bu komut kendisi olmak için neler belirtebilirsiniz olamaz ... Herkes bunu nasıl biliyor?

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

}

2 Cevap

Sen RecursiveDirectoryIterator sınıfını kullanabilirsiniz:

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

Örnek http://www.php.net/manual/en/class.recursivedirectoryiterator.php çalınmış ve sevme konaklayabilir.

Sen aşağıdaki kodu kullanabilirsiniz:

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

Sadece bir nesne, bu statik işlev eklemek ve diyoruz:

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

Bu size ya da başkalarına yardım umuyoruz.