Ver Mensaje Individual
  #16 (permalink)  
Antiguo 11/07/2011, 08:10
luisgzafra
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Problema con comprimir todo el directorio

Gracias al otro post (http://www.forosdelweb.com/f18/compr...entero-928286/) conseguí esto:

Código PHP:
Ver original
  1. function process_dir($dir,$recursive = FALSE) {
  2.     if (is_dir($dir)) {
  3.       for ($list = array(),$handle = opendir($dir); (FALSE !== ($file = readdir($handle)));) {
  4.         if (($file != '.' && $file != '..') && (file_exists($path = $dir.'/'.$file))) {
  5.           if (is_dir($path) && ($recursive)) {
  6.             $list = array_merge($list, process_dir($path, TRUE));
  7.           } else {
  8.             $entry = array('filename' => $file, 'dirpath' => $dir);
  9.  
  10.  //---------------------------------------------------------//
  11.  //                     - SECTION 1 -                       //
  12.  //          Actions to be performed on ALL ITEMS           //
  13.  //-----------------    Begin Editable    ------------------//
  14.  
  15.   $entry['modtime'] = filemtime($path);
  16.  
  17.  //-----------------     End Editable     ------------------//
  18.             do if (!is_dir($path)) {
  19.  //---------------------------------------------------------//
  20.  //                     - SECTION 2 -                       //
  21.  //         Actions to be performed on FILES ONLY           //
  22.  //-----------------    Begin Editable    ------------------//
  23.  
  24.  
  25.  
  26.  //-----------------     End Editable     ------------------//
  27.               break;
  28.             } else {
  29.  //---------------------------------------------------------//
  30.  //                     - SECTION 3 -                       //
  31.  //       Actions to be performed on DIRECTORIES ONLY       //
  32.  //-----------------    Begin Editable    ------------------//
  33.  
  34.  //-----------------     End Editable     ------------------//
  35.               break;
  36.             } while (FALSE);
  37.             $list[] = $entry;
  38.           }
  39.         }
  40.       }
  41.       closedir($handle);
  42.       return $list;
  43.     } else return FALSE;
  44.   }  
  45.  
  46.  
  47.  
  48.   $result = process_dir('img/');
  49.  
  50.  
  51. require ("zipfile.php");
  52.  
  53. $zipfile = new zipfile();
  54.  
  55.  
  56.  
  57.   foreach ($result as $file) {
  58.        $file_e= $file['dirpath'].$file['filename'] ;
  59.        if (is_dir($file_e)) {
  60.        $zipfile->add_dir($file_e);
  61.      //  echo "<b>Directorio: </b>";
  62.        } else {
  63. $zipfile->add_file(implode("",file($file_e)), $file_e);
  64.     //   echo "<b>Archivo: </b>";
  65.        }
  66.        echo $file_e;
  67.        echo "<br>";
  68.       }
  69.      
  70.  
  71. header("Content-type: application/octet-stream");
  72. header("Content-disposition: attachment; filename=fotos.zip");
  73. echo $zipfile->file();

Crea un zip con todo lo que hay en el directorio, en este caso img/, y te lo da a descargar.

El problema está en que no llega mas allá de un directorio.

Me explico mejor; comprime todos los archivos que haya e incluso los directorios que haya dentro de ese, pero... los directorios de dentro, lo que contengan no lo comprime.


Un ej para que se me entienda:

Tengo

1.php
2.php
img/
img/hola.php


El .zip solo contiene
1.php
2.php
img/


y no img/hola.php

Espero que puedan ayudarme
__________________
:)