Dateiliste rekursiv mit Unterordner und ZIP Archiv

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateiliste rekursiv mit Unterordner und ZIP Archiv

    Hallo zusammen,
    ich möchte für einen bestimmten Ordner und seine Unterordner eine Dateiliste erstellen und dann in ein ZIP Archiv packen. Mein bisheriger Ansatz kam aus dem php.net diesen habe ich auch soweit zum Laufen bekommen, das mir eine Dateiliste für das entsprechende Verzeichnis und auch die Unterverzeichnisse erstelle wird. Problematisch ist jedoch die Eliminierung der Ausgabe . für die Unterverzeichnisse.
    PHP-Code:
    $password "meinpasswort";
        
    $sourcefolder "/meinpfad/";
        
    $dirlist = new RecursiveDirectoryIterator($sourcefolder);
        
    $filelist = new RecursiveIteratorIterator($dirlist);
        
    //how many file can be added before a reopen is forced?
        
    $filelimit 245;
        
    // Defines the action
        
    $file tempnam("/meinpfad/_tmp""zip");
        
    #zip archiv erstellen
        
    $zip = new ZipArchive();
        
    $zippath "/meinpfad/_zip/";
        
    $zipname "meinfile" ".zip";
        
    $zipfile $zippath $zipname;
        
    $res $zip->open("$file"ZipArchive::CREATE);
        if (
    $res === TRUE) {
            foreach (
    $filelist as $key=>$value) {
                
    $path str_replace($sourcefolder""$key);
                
    $realpath=realpath($key);
                if ((
    $path != ".") && ($path != "..")) {
                    
    #echo "<pre>";echo "key $key<br>";echo "</pre>";
                    #echo "<pre>";echo "path $path<br>";echo "</pre>";
                    #echo "<pre>";echo "realpath $realpath<br>";echo "</pre>";
                    #todo Problem bei existierenden Unterverzeichnissen test1/. eliminieren
                
    if (is_dir($key)) { die($key.' does not exist. Please contact your administrator or try again later.'); }
                if (!
    file_exists($key)) { die($key.' does not exist. Please contact your administrator or try again later.'); }
                if (!
    is_readable($key)) { die($key.' not readable. Please contact your administrator or try again later.'); }
                if (
    $zip->numFiles == $filelimit) {$zip->close(); $zip->open($file) or die ("Error: Could not reopen Zip");}
                
    $zip->addFile(realpath($key), $path) or die ("ERROR: Could not add file: $key </br> numFile:".$zip->numFiles);
                    
    $zip->setEncryptionName($pathZipArchive::EM_AES_256$password);
                }
            }
            
    $zip->close();
            
    rename ($file$zipfile);
            
    $msg "Link zur ZIP-Datei: <a href=\"https://url/$zipname\">https://url/_zip/$zipname</a> Passwort: ";
            
    $msgblock="success";
            
    $clipboardtext "$password";
            
    $message = array("msg"=>$msg"msgblock"=>$msgblock"clipboardtext" => $clipboardtext);
            
    $message createMessage ($message);
            echo 
    "$message";
        } else {
            
    $msg "Fehler beim Erstellen von https://url/_tmp/$file";
            
    $msgblock="danger";
            
    $clipboardtext "";
            
    $message = array("msg"=>$msg"msgblock"=>$msgblock"clipboardtext" => $clipboardtext);
            
    $message createMessage ($message);
            echo 
    "$message";
            exit;
        } 
    Ausgabe:
    key /meinpfad/test1/.
    path test1/.
    realpath /meinpfad/test1
    /meinpfad/test1/. does not exist. Please contact your administrator or try again later.

    Sofern ich die Unterverzeichnisse entferne funktioniert es.

    Gruß
    Micha

  • #2
    Du machst imho diesen Fehler
    PHP-Code:
    $realpath=realpath($key);
    if ((
    $path != ".") && ($path != "..")) 
    Da musst du doch auf $realpath prüfen. Und wohl den absoluten Pfad mit strpos auf './' und '../' checken.

    So auf die Schnelle
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar

    Lädt...
    X