El directorio es algo así como:
home/
file1.html
file2.html
Another_Dir/
file8.html
Sub_Dir/
file19.html
Estoy usando la misma clase PHP Zip utilizada en PHPMyAdmin http://trac.seagullproject.org/browser/branches/0.6-bugfix/lib/other/Zip.php . No estoy seguro de cómo comprimir un directorio en lugar de solo un archivo. Esto es lo que tengo hasta ahora:
$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
pero cuando intento descomprimir el archivo zip descargado correspondiente, aparece "operación no permitida"
Este error solo ocurre cuando intento descomprimir en mi mac, cuando descomprimo a través de la línea de comando, el archivo se descomprime correctamente. ¿Necesito enviar un tipo de contenido específico en la descarga, actualmente 'aplicación / zip'?
Respuestas:
Aquí hay una función simple que puede comprimir cualquier archivo o directorio de forma recursiva, solo necesita que se cargue la extensión zip.
Llámalo así:
fuente
file_get_contents
y agrega cadenas. zip no admite agregar archivos directamente?'/'
conDIRECTORY_SEPARATOR
para que funcione en Windows, por supuesto. De lo contrario, terminará con la ruta completa (incluido el nombre de la unidad) en su ZIP, por ejemploC:\Users\...
.//
con,\
ya que esto realmente rompe el foreach en Windows. Si usa el integradoDIRECTORY_SEPARATOR
como debería, no es necesario reemplazarlo. La codificación de/
es lo que estaba causando problemas a algunos usuarios. Estaba un poco confundido sobre por qué obtenía un archivo vacío. Mi revisión funcionará bien en * nix y Windows.Otro archivado de árbol de directorios recursivo, implementado como una extensión de ZipArchive. Como beneficio adicional, se incluye una función auxiliar de compresión de árbol de declaración única. Se admite el nombre local opcional, como en otras funciones de ZipArchive. Error de manejo del código que se agregará ...
fuente
He editado la respuesta de Alix Axel para tomar un tercer argumento, al configurar este tercer argumento para que
true
todos los archivos se agreguen en el directorio principal en lugar de directamente en la carpeta zip.Si el archivo zip existe, el archivo también se eliminará.
Ejemplo:
Estructura de
true
cremallera del tercer armazón :Tercer argumento
false
o estructura de cremallera faltante:Código editado:
fuente
$maindir
al nombre preferido.USO: thisfile.php? Dir =. / Ruta / a / carpeta (Después de comprimir, también comienza la descarga :)
fuente
Pruebe este enlace <- MÁS CÓDIGO FUENTE AQUÍ
fuente
Aquí está mi código para comprimir las carpetas y sus subcarpetas y sus archivos y hacerlo descargable en formato zip
Si tiene algún problema con el código, hágamelo saber.
fuente
Necesitaba ejecutar esta función Zip en Mac OSX
así que siempre comprimiría ese molesto .DS_Store.
Adapté https://stackoverflow.com/users/2019515/user2019515 incluyendo archivos adicionales de Ignore.
Entonces, para ignorar el .DS_Store de zip, ejecuta
zipIt ('/ ruta / a / carpeta', '/ ruta/a/compressed.zip', falso, matriz ('. DS_Store'));
fuente
Gran solución, pero para mi Windows necesito hacer modificaciones. Debajo del código de modificación
fuente
Este código funciona tanto para Windows como para Linux.
fuente
Aquí está mi versión basada en Alix, funciona en Windows y, con suerte, también en * nix:
fuente
Aquí está la función recursiva simple, fácil de leer que funciona muy bien:
fuente
Siguiendo la respuesta de @ user2019515, necesitaba manejar las exclusiones en mi archivo. aquí está la función resultante con un ejemplo.
Función Zip:
Cómo usarlo :
fuente