2016-08-30 4 views
1

Ich möchte Unterordner mit Datei zum Archiv hinzufügen.Datei zum Unterordner zum ZIP-Archiv hinzufügen?

Ich kann es nicht verwenden, weil ich nicht alle Dateien meines Ordners benötige. Ich habe Array mit einigen Informationen über Dateien:

$paths = [ 
[ 
    'name' => 'file', 
    'ext' => 'txt', 
    'path' => '/folder/' 
], 
[ 
    'name' => 'subFolder', 
    'ext' => 'folder', 
    'path' => '/folder/' 
], 
[ 
    'name' => 'fileInSubFolder', 
    'ext' => 'txt', 
    'path' => '/folder/subFolder/' 
] 
]; 

Im Zyklus ich es tun:

if($folder[$i]['ext'] == 'folder') 
    $zip->addEmptyDir($fileName); 
else 
    $zip->addFromString($fileName.$fileExt, file_get_contents($fileFullPath.$fileExt)); 

Wenn „Ordner“, dann habe ich leere Ordner im Archiv zu erstellen, sonst Datei zum Archiv hinzufügen. Aber wenn die Datei im Unterordner gefunden wird, wird die Datei zum Stammverzeichnis des Archivs hinzugefügt. Und, wie kann ich Datei zu neuen leeren Unterordner hinzufügen? Oder wie kann ich das aktuelle Verzeichnis für die Datei hinzufügen?

Antwort

0

Sie ändern nicht "Verzeichnis" mit ZipArchive übergeben Sie immer den absoluten Dateipfad beim Hinzufügen einer Datei.

Nun, ich bin nicht sicher, warum Sie haben eine $paths Array aber dann Sie Schleife durch $folders da kann ich nicht den gesamten Code sehen, aber wenn Sie durch Ihre $paths Array Looping wurden würden Sie den absoluten Pfad anhängen möchten Sie haben an der Vorderseite des Dateinamens gespeichert.

$paths = [ 
[ 
    'name' => 'file', 
    'ext' => 'txt', 
    'path' => '/folder/' 
], 
[ 
    'name' => 'subFolder', 
    'ext' => 'folder', 
    'path' => '/folder/' 
], 
[ 
    'name' => 'fileInSubFolder', 
    'ext' => 'txt', 
    'path' => '/folder/subFolder/' 
] 
]; 


if($paths[$i]['ext'] == 'folder') { 
    $zip->addEmptyDir($fileName); 
} else { 
    // This would create "/folder/subFolder/fileInSubFolder.txt" 
    $fullFileName= $paths[$i]['path'] . $paths[$i]['name'] . "." . $paths[$i]['ext']; 
    $zip->addFromString($fullFileName, /* File Data Here */); 
} 
+0

Vielen Dank! Ich habe nur verwirrt. Ich dachte, dass der erste Parameter in "addFromString" ist nur Dateiname, aber dort müssen relative Pfad, starten von Ordner, den Sie archivieren möchten. Vielen Dank! –