Ich muss Benutzern erlauben, eine Zip-Datei über ein Webformular hochzuladen. Auf dem Server läuft Linux mit einem Apache-Webserver. Gibt es Vorteile, ein Modul wie Archive :: Zip zu verwenden, um dieses Archiv zu extrahieren oder sollte ich einfach ein System ausführen Aufruf an unzip
mit Backticks?
Laut Archive :: Zip-Dokumentation Sie wären besser dran mit Archive :: Extract :
Wenn Sie nur Reißverschlüsse (und / oder andere Archive) extrahieren, sollten Sie sich stattdessen Archive :: Extract ansehen, da es viel benutzerfreundlicher ist und archivspezifische Funktionen ausklammert.
>
Das ist interessant, weil Archive :: Extract versuchen Archiv: Zip zuerst und dann zurück in die unzip
Binärdatei, wenn es fehlschlägt. So scheint es, dass Archive :: Zip die bevorzugte Option ist.
Archive :: Zip verwendet Compress :: Raw: : Zlib , welches eine Low-Level-Schnittstelle zur zlib-Systembibliothek ist; Es handelt sich also nicht um eine reine Perl-Implementierung, was bedeutet, dass die Leistung in unzip
ähnlich ist. Mit anderen Worten, aus Performance-Sicht gibt es keinen Grund, unzip
vor Archive :: Zip zu wählen.
Wenn Sie die binäre unzip
ausführen, wird Ihr Prozess fork / exec und
Sie müssen auch mit dem korrekten Pfad zu unzip
konfigurieren. Angesichts all dessen würde ich den Ansatz der Bibliothek bevorzugen.
Eine Sorge ist mit der Erinnerung. Wir haben den harten Weg gefunden (Produktionsserver abgestürzt), dass Archive::Tar
ein Speicherleck hatte. Während also die Verwendung eines Moduls anstelle eines Systemaufrufs zu einem externen Befehl eine gute Idee ist (siehe andere Antworten für Argumentation), müssen Sie sicherstellen, dass das Modul keine Probleme hat.