2012-06-18 8 views
6

Grundsätzlich versuche ich ein Verzeichnis von einem relativen Pfad mit der Joomla JArchive::create() Funktion zu komprimieren. Bisher kann ich ein Verzeichnis komprimieren, aber es zieht den gesamten absoluten Pfad durch.JArchive :: Erstellen für Joomla 2.5?

Der Code, den ich, dass zip bin mit dem absoluten Pfad wird wie unten dargestellt:

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

Ich denke, ist, hat etwas mit der Verwendung der JPATH_SITE Struktur zu tun, was ich versucht habe zu der JURI::root Struktur zu verändern, aber dann stellt ein Fehler, der besagt, dass es kein gültiger Pfad ist.

Ich könnte mir jemand sagen, wie relativer Pfad in Joomla basierend auf dem Code, den ich bereitgestellt habe, dann würde dies sehr geschätzt werden.

+0

Gibt es einen bestimmten Grund für die Verwendung des relativen Pfads? – Anand

+0

@Anand: Ja, weil wenn ich einen absoluten Pfad verwende, reißt es tatsächlich den gesamten absoluten Pfad, beginnend mit dem Ordner public_html. – Lodder

+0

Ich denke, $ zipFilesArray sollte das Array sein, das die Dateien mit dem vollständigen Pfad enthält, nicht nur den Dateinamen. Auch Daten sind nicht erforderlich in $ zipFilesArray – Anand

Antwort

2

Schließlich haben Sie den Code, der mir freundlicherweise von einem anderen Erweiterungsentwickler gegeben wurde.

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

Das funktioniert für mich. Sie können versuchen und sehen.

+0

Ich habe dies versucht und es zieht den absoluten Pfad. Ich brauche es, um den relativen Pfad zu zippen. – Lodder

Verwandte Themen