JArchive::create для Joomla 2.5?

В основном я пытаюсь сжать каталог по относительному пути, используя функцию Joomla JArchive::create(). Пока я могу заархивировать каталог, но он заархивирует весь абсолютный путь.

Код, который я использую для этого почтового индекса, показывает абсолютный путь, как показано ниже:

$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 на основе кода, который я предоставил, тогда это будет очень признательно.


person Lodder    schedule 18.06.2012    source источник
comment
есть ли какая-то конкретная причина для использования относительного пути?   -  person Anand    schedule 26.07.2012
comment
@Anand: да, потому что, когда я использую абсолютный путь, он фактически сжимает весь абсолютный путь, начиная с папки public_html.   -  person Lodder    schedule 26.07.2012
comment
я думаю, что $zipFilesArray должен быть массивом, содержащим файлы с полным путем, а не только имя файла. Также данные не требуются в $zipFilesArray   -  person Anand    schedule 26.07.2012


Ответы (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();
person Lodder    schedule 27.08.2012

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

Это работает для меня. Вы можете попробовать и посмотреть.

person cheetooh    schedule 01.07.2012
comment
Я пробовал это, и он застегивал абсолютный путь. Мне нужно, чтобы закрепить относительный путь. - person Lodder; 12.07.2012