Necesito permitir que los usuarios carguen un archivo zip a través de un formulario web. El servidor ejecuta Linux con un servidor web Apache. ¿Hay ventajas en usar un módulo como Archive::Zip para extraer este archivo o debo simplemente ejecutar una llamada al sistema al unzip
con patillas?¿Cómo puedo extraer un archivo comprimido en Perl?
Respuesta
Si se ejecuta el binario unzip
, el proceso se bifurcará/exec y
- una instancia de un nuevo proceso
- consumen más memoria (por la duración del proceso generado)
Usted También deberá configurar con la ruta correcta al unzip
. Dado todo esto, preferiría mucho el enfoque de la biblioteca.
De acuerdo con la Archive::Zip documentation que sería mejor usar Archive::Extract:
Si sólo se va a ser cremalleras de extracción (y/u otros archivos) se le recomienda buscar en el uso Archivo :: Extracto en cambio, ya que es mucho más fácil de usar y excluye la funcionalidad específica del archivo.
Eso es interesante porque Archive::Extract will try Archive::Zip first and then fall back to the unzip
binary if it fails. Parece que Archive :: Zip es la opción preferida.
Archive :: Zip usa Compress::Raw::Zlib que es una interfaz de bajo nivel para la biblioteca del sistema zlib; por lo tanto, no es una implementación pura de Perl, lo que significa que tendrá un rendimiento similar al unzip
. Entonces, en otras palabras, desde una perspectiva de rendimiento no hay razón para elegir unzip
antes que Archive :: Zip.
Si usa 'Archive :: Extract', entonces también funcionará para otros formatos de compresión. –
Una preocupación es con la memoria. Hemos encontrado la manera difícil (servidor web de producción se colgó) que Archive::Tar
tenía una pérdida de memoria. Entonces, si bien utilizar un módulo en lugar de una llamada al sistema a un comando externo es una buena idea (ver otras respuestas para razonar), debe asegurarse de que el módulo no tenga errores.
- 1. ¿Cómo puedo ver un archivo comprimido contenido
- 2. ¿Cómo puedo extraer campos de un archivo CSV en Perl?
- 3. Rails 3: ¿Cómo puedo generar un archivo comprimido bajo pedido?
- 4. ¿Cómo puedo extraer imágenes de un archivo PDF?
- 5. ¿Cómo puedo extraer/analizar datos tabulares de un archivo de texto en Perl?
- 6. ¿Cómo puedo extraer datos de tablas HTML en Perl?
- 7. Cómo comprimir un directorio en un archivo comprimido programáticamente
- 8. ¿Cómo puedo extraer un nombre de archivo de una ruta usando Perl?
- 9. ¿Cómo puedo extraer subcadenas de una cadena en Perl?
- 10. ¿Cómo puedo extraer un solo archivo de un archivo ZIP utilizando Perl's Archive :: Zip?
- 11. ¿Cómo puedo extraer datos de un archivo .fig en MATLAB?
- 12. ¿Cómo puedo extraer todas las clases en un archivo separado?
- 13. ¿Puedo extraer tablas de PDF usando Perl?
- 14. Actualización de un único archivo en un archivo comprimido tar
- 15. usando sed en un archivo comprimido
- 16. Cómo extraer un archivo ZIP en C#
- 17. Crear un archivo comprimido cifrado con PHP
- 18. Extraer archivos de un archivo comprimido mediante programación mediante C# y System.IO.Packaging
- 19. ¿Cómo extraer un número de una cadena en Perl?
- 20. ¿Cómo puedo definir constantes en un archivo separado en Perl?
- 21. Ruby: Crear un archivo comprimido Gzipped
- 22. ¿Cómo puedo usar XML :: LibXML de Perl para extraer un atributo en una etiqueta?
- 23. Cómo leer datos de un archivo comprimido sin tener que descomprimir el archivo completo
- 24. ¿Cómo puedo monitorizar de forma asíncrona un archivo en Perl?
- 25. ¿Cómo puedo crear un archivo binario en Perl?
- 26. ¿Cómo puedo omitir líneas al sorber un archivo en Perl?
- 27. ¿Cómo puedo verificar si existe un archivo en Perl?
- 28. ¿Cómo puedo crear un archivo Zip en Perl?
- 29. ¿Cómo crear un archivo tar completamente comprimido usando Python?
- 30. ¿Cómo puedo extraer datos EXIF usando PerlMagick?
Nunca entiendo este tipo de pensamiento. Un fork/exec es un proceso muy rápido, cualquiera que haya pasado algún tiempo leyendo o escribiendo scripts de shell es consciente de esto. La memoria consumida por el binario de descompresión en sí es trivial en comparación con los costos del algoritmo y (especialmente) los datos que contiene. Y/usr/bin/descomprime naves de forma predeterminada en cada distribución de Linux, y creo que BSD y Cygwin también. A menos que tenga un código de ejemplo tan trivial como: 'abrir mi $ input," descomprimir -cp $ ARCHIVE $ FILE | "', preferiría la opción simple. –
Aunque estoy de acuerdo con lo anterior * en general *, si tiene un servidor muy cargado, su consumo de recursos aumentará con el modelo fork/exec. La asignación de pid, la asignación de flujo entre procesos, la asignación de memoria (que permite copiar con escritura). Para procesos independientes estoy contento con el modelo fork/exec. Para los modelos de servidor prefiero alejarme de esto hacia el modelo con la menor cantidad de asignación de recursos. –
Si está bifurcando en un bucle, especialmente un bucle caliente, verá absolutamente problemas de rendimiento. Si no está en un bucle, o si está bifurcando a una velocidad de una vez por segundo o una vez cada pocos segundos, entonces no hay problema. Además, usar una biblioteca en lugar del comando 'unzip' del sistema puede ser un beneficio; la biblioteca puede ser más nueva y menos problemática. –