【问题标题】:JArchive::create for Joomla 2.5?J Archive::create for Joomla 2.5?
【发布时间】:2012-06-20 11:23:56
【问题描述】:

基本上,我正在尝试使用 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 中压缩相对路径,我们将不胜感激。

【问题讨论】:

  • 使用相对路径有什么具体原因吗?
  • @Anand:是的,因为当我使用绝对路径时,它实际上会压缩整个绝对路径,从 public_html 文件夹开始。
  • 我认为 $zipFilesArray 应该是包含具有完整路径的文件的数组,而不仅仅是文件名。 $zipFilesArray 中也不需要数据

标签: joomla zip relative-path joomla2.5


【解决方案1】:

终于有了另一个扩展开发者好心给我的代码。

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

【讨论】:

    【解决方案2】:
        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);
    

    这对我有用。你可以试试看。

    【讨论】:

    • 我已经尝试过了,它会压缩绝对路径。我需要它来压缩相对路径。
    猜你喜欢
    • 2012-09-23
    • 2013-03-11
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2014-05-14
    • 2013-02-25
    相关资源
    最近更新 更多