2012-06-18 79 views
6

基本上我試圖使用Joomla JArchive::create()函數從相對路徑壓縮目錄。到目前爲止,我可以壓縮一個目錄,但它能夠完成整個絕對路徑。JArchive ::創建Joomla 2.5?

我使用的壓縮如下圖所示的絕對路徑的代碼:

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

,我認爲是有事情做與使用JPATH_SITE結構,我試圖改變到JURI::root結構,但隨後提供一個錯誤說它不是一個有效的路徑。

我的任何人都可以告訴我如何壓縮Joomla的相對路徑基於我提供的代碼,那麼這將非常感激。

+0

是否有任何使用相對路徑的具體原因? – Anand

+0

@Anand:是的,因爲當我使用絕對路徑時,它實際上是從public_html文件夾開始壓縮整個絕對路徑。 – Lodder

+0

我認爲$ zipFilesArray應該是包含具有完整路徑的文件的數組,而不僅僅是文件名。 $ zipFilesArray中也不需要數據 – Anand

回答

2

終於有了另一個擴展開發者給我的代碼。

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

這適用於我。你可以試試看。

+0

我試過這個,它拉動了絕對路徑。我需要它壓縮相對路徑。 – Lodder