2012-06-18 12 views
6

Básicamente estoy tratando de comprimir un directorio desde una ruta relativa utilizando la función Joomla JArchive::create(). Hasta ahora puedo comprimir un directorio pero comprime toda la ruta absoluta.JArchive :: create for Joomla 2.5?

El código que estoy utilizando ese zip la ruta absoluta es como se muestra a continuación:

$zipFilesArray = array(); 
    $new_component_path = JPATH_SITE.'/'.'modules'.'/'.'mod_module_gen'.'/'.'package'.'/'.$new_folder_name; 
    $dirs = JFolder::folders($new_component_path, '.', true, true); 
    array_push($dirs, $new_component_path); 
    foreach ($dirs as $dir) { 
     $files = JFolder::files($dir, '.', false, true); 
     foreach ($files as $file) { 
      $data = JFile::read($file); 
      $zipFilesArray[] = array('name' => str_replace($new_component_path.DS, '', $file), 'data' => $data); 
     } 
    } 
    $zip = JArchive::getAdapter('zip'); 
    $zip->create($new_component_path.'/'.$new_folder_name.'.zip', $zipFilesArray); 

creo es que tiene algo que ver con el uso de la estructura JPATH_SITE que he intentado cambiar a la estructura JURI::root pero luego ofrece un error que dice que no es una ruta válida.

Cualquier persona podría decirme cómo comprimir la ruta relativa en Joomla en función del código que he proporcionado, y esto sería muy apreciado.

+0

¿Hay alguna razón específica para usar la ruta relativa? – Anand

+0

@Anand: sí, porque cuando uso una ruta absoluta, en realidad comprime toda la ruta absoluta, comenzando desde la carpeta public_html. – Lodder

+0

Creo que $ zipFilesArray debería ser la matriz que contiene los archivos con la ruta completa, no solo el nombre del archivo. También no se requieren datos en $ zipFilesArray – Anand

Respuesta

2

Finalmente tengo el código que amablemente me dio otro desarrollador de extensiones.

$folder_path = JPATH_SITE.'/modules/mod_xxxxxxxxx/package/'.$new_folder_name; 
$new_folder_name_final = $folder_path . '.zip'; 

$zip = new ZipArchive(); 

if ($zip->open($new_folder_name_final, ZIPARCHIVE::CREATE) !== TRUE) { 
    return false; 
} 

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder_path)); 

foreach ($iterator as $key=>$value) { 
    $key = str_replace('\\', '/', $key); 
    if (!is_dir($key)) { 
     if(!$zip->addFile(realpath($key), substr($key, strlen($folder_path) - strlen(basename($folder_path))))) { 
      return false; 
     } 
    } 
$zip->close(); 
0
jimport('joomla.filesystem.archive'); 

    $zipFilesArray = array(); 
    $dirs = JFolder::folders($new_component_path, '.', true, true); 
    array_push($dirs, $new_component_path); 
    foreach ($dirs as $dir) { 
     $files = JFolder::files($dir, '.', false, true); 
     foreach ($files as $file) { 
      $data = JFile::read($file); 
      $zipFilesArray[] = array('name' => str_replace($new_component_path.DS, '', $file), 'data' => $data); 
     } 
    } 
    $zip = JArchive::getAdapter('zip'); 
    $zip->create($tmp_path.DS.'files.zip', $zipFilesArray); 

Esto funciona para mí. Puedes intentar y ver.

+0

He intentado esto y comprime la ruta absoluta. Lo necesito para comprimir la ruta relativa. – Lodder