2013-08-28 4 views
0

Я создаю архив дегтя со следующей функциейсоздания архива с грушей Archive_Tar

public static function packDirectory($path, $outpath) { 
    require_once 'Archive/Tar.php'; 

    $obj = new Archive_Tar($outpath); 
    $obj->setErrorHandling(PEAR_ERROR_PRINT); 

    $handle=opendir($path); 
    $files = array(); 

    while (false !== ($file = readdir($handle))) { 
     if ($file == '.' || $file == '..') { 
      continue; 
     } 

     $files[] = $path . '/' . $file; 
    } 

    $obj->create($files); 
} 

Путь нечто вроде folder1/folder2/folder3/. Это создает архив как следующего

folder1/folder2/folder3/fileA 
folder1/folder2/folder3/fileB 
folder1/folder2/folder3/fileC 
folder1/folder2/folder3/subfolder/fileD 

Я хочу, чтобы быть

fileA 
fileB 
fileC 
subfolder/fileD 

Как тх может быть сделана?

ответ

0

Вам необходимо использовать createModify method - он принимает еще два параметра, чем метод создания Archive_Tar. Для того, чтобы быть полным, эти три параметра:

  • $ p_filelist - массив имен файлов
  • $ p_add_dir - строка/путь к присоединяемый к именам файлов.
  • $ p_remove_dir - строка/путь для удаления из имен файлов.

Я немного изменил метод packDirectory, включив третий параметр удаления из файлов. Это выглядит так:

<?php 
class Packer { 

    public static function packDirectory($path, $outpath, $stripPath = '') { 
     require_once 'Archive/Tar.php'; 

     $obj = new Archive_Tar($outpath); 
     $obj->setErrorHandling(PEAR_ERROR_PRINT); 

     $handle=opendir($path); 
     $files = array(); 

     while (false !== ($file = readdir($handle))) { 
      if ($file == '.' || $file == '..') { 
       continue; 
      } 

      $files[] = $path . '/' . $file; 
     } 

     if ($stripPath === '') { 
      $obj->create($files); 
     } else { 
      $obj->createModify($files, '', $stripPath); 
     } 
    } 
} 

Packer::packDirectory(
    "folder1/folder2/folder3", 
    "Packer.tar", 
    'folder1/folder2/folder3' 
); 
?> 
Смежные вопросы