2013-08-28 20 views
0

創建存檔我創建一個tar歸檔具有以下功能梨的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的create方法多兩個參數。是完整的,這三個參數是:

  • $ 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' 
); 
?>