2012-06-18 11 views
6

基本的に私はJoomla JArchive::create()関数を使って相対パスからディレクトリを圧縮しようとしています。これまでのところ、私はディレクトリを圧縮することができますが、絶対パス全体を圧縮します。JArchive :: create for 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); 

私は、私はJURI::root構造に変更してみましたが、その後提供していますJPATH_SITE構造を使用してとは何かを持っていると思います有効なパスではないというエラーです。

私は誰も私が提供しているコードに基づいてJoomlaで相対パスを圧縮する方法を教えてくれました。これは非常に感謝しています。

+0

相対パスを使用する特別な理由はありますか? – Anand

+0

@Anand:はい、絶対パスを使用すると、実際には絶対パス全体がzipされるので、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

関連する問題