基本上,我正在尝试使用Joomla JArchive::create()函数从相对路径压缩目录。到目前为止,我可以压缩目录,但可以压缩整个绝对路径。

我正在使用该zip的代码的绝对路径如下所示:

$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中压缩相对路径,那么将不胜感激。

最佳答案

终于有了另一位扩展开发人员友好地提供给我的代码。

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

10-06 11:20