Joomla заархивирует все

Версия Joomla = 2.5.6

Сервер = сервер Wamp

PHP = 5.3.8

Наконец-то я понял, как заархивировать и массив файлов, используя следующий код:

$filesArray = array();
$archivename = JPATH_SITE.'/'.'modules'.'/'.'mod_module_gen'.'/'.'package'.'/'.$new_folder_name.'/'.$new_folder_name.'.zip';
$excludes = array('.svn', '.zip','.DS_Store','__MACOSX','CVS');
$files = JFolder::files(JPATH_SITE.'/'.'modules'.'/'.'mod_module_gen'.'/'.'package'.'/'.$new_folder_name, null, true, true, $excludes);

foreach($files as $file)
{
    $data = JFile::read($file);
    $filesArray[] = array('name' => $file, 'data' => $data);
}

$zip =& JArchive::getAdapter('zip');
$zip->create($archivename, $filesArray);

Однако, если не просто заархивировать файлы в созданной папке, он заархивирует все папки, ведущие к массиву файлов.

/wamp/www/joomjunk/modules/mod_module_gen/package/$new_folder_name/files

$new_folder_name = определяемое пользователем имя

Он должен застегиваться только так, как показано ниже:

$new_folder_name/files

Есть ли что-то в коде, что я сделал неправильно или чего-то не хватает, из-за чего он также заархивирует всю предыдущую папку? Любая помощь будет очень признательна. С уважением


person Lodder    schedule 21.06.2012    source источник
comment
может быть, попробуйте использовать относительные пути?   -  person Thomas    schedule 21.06.2012


Ответы (1)


Если вы используете абсолютные пути, такие как

JPATH_SITE.'/'.'modules'.'/'.'mod_module_gen'.'/'.'package'.'/'.$new_folder_name

вы получите архив со структурой папок, которую вы ему предоставили.

Короткий пример из командной строки:

thomas@thinky ~ % tar -cf bar.tar image.jpg
thomas@thinky ~ % tar -cf foo.tar /home/thomas/image.jpg

Обратите внимание на структуру папок в архивах:

thomas@thinky ~ % tar -tvf bar.tar
-rw-rw-r-- thomas/thomas 1922254 2012-04-23 20:02 image.jpg
thomas@thinky ~ % tar -tvf foo.tar
-rw-rw-r-- thomas/thomas 1922254 2012-04-23 20:02 home/thomas/image.jpg
person Thomas    schedule 21.06.2012
comment
спасибо за ответ @Thomas, как мне изменить путь с абсолютного на относительный? - person Lodder; 21.06.2012
comment
Я уже ответил на это, посмотри, что я сделал, чтобы удалить home/thomas/ в архиве. Возможно, отладьте свое приложение и посмотрите, что находится в JPATH_SITE, и выясните, в каком каталоге работает ваш скрипт. затем создайте свой путь относительно каталога, который вы хотите заархивировать. В итоге путь может выглядеть примерно так: ../modules/mod_module_gen/package/'. $new_folder_name. - person Thomas; 21.06.2012
comment
Я понял, что вы ответили на него, но немного запутался с командами. Спасибо за помощь ;) - person Lodder; 21.06.2012