¿Cómo reunir todos los archivos de la carpeta “images/”, excepto “generate_zip.php”, y convertirlo en un .zip descargable? En este caso, la carpeta “images/” siempre tiene una imagen diferente. ¿Es eso posible?
T.Todua
======= ¡Solución de trabajo!======
incluye todas las subcarpetas:
new GoodZipArchive('path/to/input/folder', 'path/to/output_zip_file.zip') ;
Si es la mejor solución, no lo sé, pero hice +1 porque esto también funcionó para mí.
–Jakob Sternberg
18 mar. 14 a las 23:11
Esta es una buena respuesta, pero no se basa en la pregunta que hizo OP, en la que especificó que solo le importaban los archivos de imagen de directorios individuales. Solo pensé que debería aclararse, ya que cualquiera que esté tratando de hacer exactamente lo que pidió OP encontraría que este código no hace exactamente eso.
– Skrilled
20 oct.
¡Gracias! Solo por curiosidad, ¿cómo podemos incluir varias carpetas?
– Nick Newman
15 nov.
Estoy llamando a este archivo con un servicio de angular. El archivo no se descarga. ¿Alguna sugerencia?
– m1crdy
11 mar. 16 a las 15:58
@Ngob arreglado ahora
– T. Todua
28 mayo 2019 en 14:58
skrilled
esto asegurará que no se agregue un archivo con la extensión .php:
foreach ($files as $file) {
if(!strstr($file,'.php')) $zip->addFile($file);
}
ok, pero ¿cómo listar todos los archivos del directorio images/? dentro de la matriz?
–Ygor Montenegro
17 jul.
php.net/manual/en/function.readdir.php tiene lo que necesita en ese sentido, el ejemplo n. ° 2 es probablemente el más fácil. podría extender if ($entrada!= “.” && $entrada!= “..”) a if ($entrada!= “.” && $entrada!= “..” && !strstr($entrada,’. php’)) y agregue zip en ese ciclo también en lugar de mi ejemplo anterior.
– Skrilled
17 jul.
Ya lo intenté, pero ¿cómo poner el resultado while dentro de la matriz ();?
–Ygor Montenegro
17 jul.
cambiar $archivos = array($listararchivos); a $archivos = array(); luego en el bucle while haz array_push($listfiles,$entry);
– Skrilled
17 jul.
como esto: if ($handle = opendir('../adc/')) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { array_push($listfiles, "'$entry, "); } } closedir($handle); } $files = array(); aun no genera..
–Ygor Montenegro
17 jul.
camino2vin
Dado que solo necesita archivos específicos de un directorio para crear ZipArchive, puede usar globo() función para hacer esto.
<?php
$zip = new ZipArchive;
$download = 'download.zip';
$zip->open($download, ZipArchive::CREATE);
foreach (glob("images/*.png") as $file) { /* Add appropriate path to read content of zip */
$zip->addFile($file);
}
$zip->close();
header('Content-Type: application/zip');
header("Content-Disposition: attachment; filename = $download");
header('Content-Length: ' . filesize($download));
header("Location: $download");
?>
No use glob() si intenta enumerar archivos en un directorio donde se almacenan muchos archivos (más de 100.000). Aparece el mensaje de error “Tamaño de memoria permitido de XYZ bytes agotados…”.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información