2012-06-18 4 views
6

Fondamentalement, j'essaie de compresser un répertoire à partir d'un chemin relatif en utilisant la fonction Joomla JArchive::create(). Jusqu'à présent, je peux compresser un répertoire, mais il zippe tout le chemin absolu.JArchive :: créer pour Joomla 2.5?

Le code J'utilise que zip le chemin absolu est comme indiqué ci-dessous:

$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); 

Je pense est a quelque chose à voir avec l'aide de la structure JPATH_SITE que j'ai essayé de changer la structure JURI::root mais fournit alors une erreur indiquant que ce n'est pas un chemin valide.

Quelqu'un pourrait me dire comment zip chemin relatif dans Joomla basé sur le code que j'ai fourni alors ce serait très apprécié.

+0

Y a-t-il une raison spécifique d'utiliser le chemin relatif? – Anand

+0

@Anand: oui car lorsque j'utilise un chemin absolu, il zippe tout le chemin absolu, à partir du dossier public_html. – Lodder

+0

Je pense que $ zipFilesArray devrait être le tableau contenant les fichiers avec le chemin complet, pas seulement le nom du fichier. Les données ne sont pas non plus nécessaires dans $ zipFilesArray – Anand

Répondre

2

Enfin avoir le code qui m'a été aimablement donné par un autre développeur d'extension.

$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); 

Cela fonctionne pour moi. Vous pouvez essayer et voir.

+0

J'ai essayé ceci et zippe le chemin absolu. J'en ai besoin pour compresser le chemin relatif. – Lodder