Ver Mensaje Individual
  #7 (permalink)  
Antiguo 11/07/2011, 07:06
Avatar de Eleazan
Eleazan
 
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Comprimir directorio entero

Fuente: http://es.php.net/manual/es/function.readdir.php#90941

Función:
Código PHP:
  function process_dir($dir,$recursive FALSE) {
    if (
is_dir($dir)) {
      for (
$list = array(),$handle opendir($dir); (FALSE !== ($file readdir($handle)));) {
        if ((
$file != '.' && $file != '..') && (file_exists($path $dir.'/'.$file))) {
          if (
is_dir($path) && ($recursive)) {
            
$list array_merge($listprocess_dir($pathTRUE));
          } else {
            
$entry = array('filename' => $file'dirpath' => $dir);

 
//---------------------------------------------------------//
 //                     - SECTION 1 -                       //
 //          Actions to be performed on ALL ITEMS           //
 //-----------------    Begin Editable    ------------------//

  
$entry['modtime'] = filemtime($path);

 
//-----------------     End Editable     ------------------//
            
do if (!is_dir($path)) {
 
//---------------------------------------------------------//
 //                     - SECTION 2 -                       //
 //         Actions to be performed on FILES ONLY           //
 //-----------------    Begin Editable    ------------------//

  
$entry['size'] = filesize($path);
  if (
strstr(pathinfo($path,PATHINFO_BASENAME),'log')) {
    if (!
$entry['handle'] = fopen($path,r)) $entry['handle'] = "FAIL";
  }
 
 
//-----------------     End Editable     ------------------//
              
break;
            } else {
 
//---------------------------------------------------------//
 //                     - SECTION 3 -                       //
 //       Actions to be performed on DIRECTORIES ONLY       //
 //-----------------    Begin Editable    ------------------//

 //-----------------     End Editable     ------------------//
              
break;
            } while (
FALSE);
            
$list[] = $entry;
          }
        }
      }
      
closedir($handle);
      return 
$list;
    } else return 
FALSE;
  } 
Uso:
Código PHP:
$result process_dir('C:/webserver/Apache2/httpdocs/processdir',TRUE);

 
// Output each opened file and then close
  
foreach ($result as $file) {
    if (
is_resource($file['handle'])) {
        echo 
"\n\nFILE (" $file['dirpath'].'/'.$file['filename'] . "):\n\n" fread($file['handle'], filesize($file['dirpath'].'/'.$file['filename']));
        
fclose($file['handle']);
    }
  } 
Es una función recursiva que te devuelve un array de todos los ficheros en el directorio... y subsiguientes directorios.

Simplemente, luego en el foreach (el que está en el uso) deberías hacer un add_file o similar!

Espero que te sirva!

PD: Lee la explicación en la fuente, te quedará más claro!