Verzeichnis ist so etwas wie:
home/
file1.html
file2.html
Another_Dir/
file8.html
Sub_Dir/
file19.html
Ich verwende dieselbe PHP-Zip-Klasse wie in PHPMyAdmin http://trac.seagullproject.org/browser/branches/0.6-bugfix/lib/other/Zip.php . Ich bin mir nicht sicher, wie ich ein Verzeichnis und nicht nur eine Datei komprimieren soll. Folgendes habe ich bisher:
$aFiles = $this->da->getDirTree($target);
/* $aFiles is something like, path => filetime
Array
(
[home] =>
[home/file1.html] => 1251280379
[home/file2.html] => 1251280377
etc...
)
*/
$zip = & new Zip();
foreach( $aFiles as $fileLocation => $time ){
$file = $target . "/" . $fileLocation;
if ( is_file($file) ){
$buffer = file_get_contents($file);
$zip->addFile($buffer, $fileLocation);
}
}
THEN_SOME_PHP_CLASS::toDownloadData($zip); // this bit works ok
Wenn ich jedoch versuche, die entsprechende heruntergeladene Zip-Datei zu entpacken, wird "Operation nicht zulässig" angezeigt.
Dieser Fehler tritt nur auf, wenn ich versuche, auf meinem Mac zu entpacken. Wenn ich über die Befehlszeile entpacke, wird die Datei in Ordnung entpackt. Muss ich beim Herunterladen einen bestimmten Inhaltstyp senden, derzeit 'application / zip'?
Antworten:
Hier ist eine einfache Funktion, die jede Datei oder jedes Verzeichnis rekursiv komprimieren kann. Sie muss nur die Zip-Erweiterung laden.
Nennen Sie es so:
quelle
file_get_contents
Zeichenfolgen verwendet und hinzufügt. unterstützt zip das direkte Hinzufügen von Dateien nicht?'/'
durch ersetzenDIRECTORY_SEPARATOR
, damit es unter Windows funktioniert. Andernfalls erhalten Sie den vollständigen Pfad (einschließlich des Laufwerksnamens) in Ihrer Postleitzahl, zC:\Users\...
.//
mit ,\
da dies tatsächlich bricht die foreach auf Fenster. Wenn Sie das integrierte GerätDIRECTORY_SEPARATOR
wie gewünscht verwenden, müssen Sie es nicht ersetzen. Die Hardcodierung von/
hat dazu geführt, dass einige Benutzer Probleme hatten. Ich war ein bisschen verwirrt darüber, warum ich ein leeres Archiv bekam. Meine Revision läuft unter * nix und Windows einwandfrei.Eine weitere rekursive Verzeichnisbaumarchivierung, die als Erweiterung von ZipArchive implementiert wurde. Als Bonus ist eine Hilfsfunktion für die Baumkomprimierung mit einer Anweisung enthalten. Optionaler lokaler Name wird wie in anderen ZipArchive-Funktionen unterstützt. Fehlerbehandlungscode hinzugefügt werden ...
quelle
Ich habe die Antwort von Alix Axel so bearbeitet , dass ein drittes Argument verwendet wird, wenn dieses dritte Argument auf gesetzt wird
true
alle Dateien setzen, werden diese Dateien im Hauptverzeichnis und nicht direkt im Zip-Ordner hinzugefügt.Wenn die Zip-Datei vorhanden ist, wird die Datei ebenfalls gelöscht.
Beispiel:
Dritte Argrument-
true
Reißverschlussstruktur:Drittes Argument
false
oder fehlende Reißverschlussstruktur:Bearbeiteter Code:
quelle
$maindir
zum bevorzugten Namen wechseln .VERWENDUNG: thisfile.php? Dir =. / Path / to / folder (Nach dem Zippen wird auch der Download gestartet :)
quelle
Versuchen Sie diesen Link <- MEHR QUELLENCODE HIER
quelle
Hier ist mein Code für Zip die Ordner und seine Unterordner und seine Dateien und machen es im Zip-Format herunterladbar
Wenn ein Problem mit dem Code vorliegt, lassen Sie es mich wissen.
quelle
Ich musste diese Zip-Funktion unter Mac OSX ausführen
also würde ich diesen nervigen .DS_Store immer komprimieren.
Ich habe https://stackoverflow.com/users/2019515/user2019515 angepasst, indem ich zusätzliche Ignor-Dateien eingefügt habe.
Um den .DS_Store von zip zu ignorieren, führen Sie ihn aus
zipIt ('/ path / to / folder', '/path/to/compressed.zip', false, array ('. DS_Store'));
quelle
Tolle Lösung, aber für mein Windows muss ich Änderungen vornehmen. Unterhalb des Änderungscodes
quelle
Dieser Code funktioniert sowohl für Windows als auch für Linux.
quelle
Hier ist meine Versionsbasis auf Alix, funktioniert unter Windows und hoffentlich auch auf * nix:
quelle
Hier ist die einfache, leicht zu lesende, rekursive Funktion, die sehr gut funktioniert:
quelle
Nach der Antwort von @ user2019515 musste ich Ausschlüsse in meinem Archiv behandeln. Hier ist die resultierende Funktion mit einem Beispiel.
Zip-Funktion:
Wie man es benutzt:
quelle