سؤال

وتعمل التعليمة البرمجية أدناه الى حد أستطيع أن بنجاح تحميل دليل متكرر. ولكن، أريد تحميل الدلائل في هذا الدليل. لذا، وعندما يصل انها في. في حدود . الدليل هو دليل فرعي "في". أريد أن استرداد متكرر محتويات ضمن الدليل في. أسماء الدلائل نفسها سوف تتغير، لذلك لا يمكن تحديد ما الذي سيكون في النص نفسه ... أي شخص يعرف كيفية القيام بذلك؟

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

} 
هل كانت مفيدة؟

المحلول

هل يمكن استخدام فئة 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 ، واستيعاب لترضيك.

نصائح أخرى

ويمكنك استخدام التعليمات البرمجية التالية:

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 );

وهذا الأمل تساعدك أو غيرها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top