【转】PEAR Archive_Tar类的中文文档

 

PEAR Archive_Tar类中文文档
===================================
最后更新(译注:英文文档) : 2001-08-15

 

总览 :
----------

  Archive_Tar类帮助创建和管理由GNU ZIP压缩或者非GNU ZIP压缩的GNU TAR格式文件.
  该类提供了一些基本函数,象创建压缩包,在压缩包里加入文件,从压缩包中解出文件,以及列出压缩包内容.
  它也提供了一些先进的函数允许用路径操作的方式添加和解压文件(译注:就是可以在添加和解压过程中,设定路径). 

样例 :
--------

  // ----- 创建对象(解压缩)
  
$tar_object = newArchive_Tar("tarname.tar");
  
$tar_object->setErrorHandling(PEAR_ERROR_PRINT);

  
// ----- 创建压缩包
  
$v_list[0]="file.txt";
  
$v_list[1]="data/";
  
$v_list[2]="file.log";
  
$tar_object->create($v_list);

  
// ----- 加入文件
  
$v_list[0]="dev/file.txt";
  
$v_list[1]="dev/data/";
  
$v_list[2]="log/file.log";
  
$tar_object->add($v_list);

  
// ----- 加入更多的文件
  
$tar_object->add("release/newfile.log release/readme.txt");

  
// ----- 列出内容
  
if (($v_list  =  $tar_object->listContent()) != 0)
    for (
$i=0;$i<sizeof($v_list);$i++)
    {
      echo
"Filename :'".$v_list[$i][filename]."'<br>";
      echo
" .size :'".$v_list[$i][size]."'<br>";
      echo
" .mtime :'".$v_list[$i][mtime]."' (".date("l dS of F Y h:i:s A",$v_list[$i][mtime]).")<br>";
      echo
" .mode :'".$v_list[$i][mode]."'<br>";
      echo
" .uid :'".$v_list[$i][uid]."'<br>";
      echo
" .gid :'".$v_list[$i][gid]."'<br>";
      echo
" .typeflag :'".$v_list[$i][typeflag]."'<br>";
    }

  
// ----- 解压缩到目录"install"
  
$tar_object->extract("install");


公共参数 :
------------------


公共方法 :
----------------

方法 : Archive_Tar($p_tarname, $p_compress = null)
描述 :
  Archive_Tar类构造器.这个构造器的作用只是声明一个新的Archive_Tar对象,以tar文件的名称与之关联.
  如果设置了compress参数,tar文件就会被读取或者被创建一个gzip或bz2压缩TAR文件.
参数 :
  $p_tarname : A valid filename for the tar archive file.
  $p_compress : 可以为null, 'gz' 或者 'bz2',出于兼容性上的原因,它也可以为true.该参数指明是否需要gzip或者bz2压缩.
返回值 :
  Archive_Tar对象.
样例 :

  $tar_object = new Archive_Tar("tarname.tar");
  
$tar_object_compressed = newArchive_Tar("tarname.tgz",true);

如何工作 :
  初始化对象.

方法 : create($p_filelist)
描述 :
  该方法创建压缩文件并加入$p_filelist所列的文件和目录.
  如果文件是存在且可写的,那么将会被新的tar文件所替代.毕竟这是一个创建动作而不是添加动作.反之,如果文件存在且为只读或者是一个目录,那么它将不会被替代.该方法即返回false和一个PEAR错误文本.
  $p_filelist参数可以是一组字符串,每个字符串代表一个文件名或者目录名,如果需要,则要带上它们的路径.该参数也可以是以空格分割开的文件或目录名组成的字符串.
  参阅createModify()方法得到更多的细节.
参数 :
  $p_filelist : 一组文件名和目录名,或者以单个空格分割开的文件或目录名组成的字符串.
返回值 :
  成功返回true,错误返回false.
样例 1 :

  $tar_object = new Archive_Tar("tarname.tar");
  
$tar_object->setErrorHandling(PEAR_ERROR_PRINT);  // 可选的错误处理
  
$v_list[0]="file.txt";
  
$v_list[1]="data/"; (末尾'/'为可选)
  
$v_list[2]="file.log";
  
$tar_object->create($v_list);
?>
样例 2 : <?php
  $tar_object
= new Archive_Tar("tarname.tar");
  
$tar_object->setErrorHandling(PEAR_ERROR_PRINT);  // 可选的错误处理
  
$tar_object->create("file.txt data/ file.log");

如何工作 :
  用正确的参数调用createModify()方法.

方法 : createModify($p_filelist, $p_add_dir, $p_remove_dir = "")
描述 :
  该方法创建一个压缩文件,并加入$p_filelist所列出的文件/目录.
  如果文件是存在且可写的,那么将会被新的tar文件所替代.毕竟这是一个创建动作而不是添加动作.反之,如果文件存在且为只读或者是一个目录,那么它将不会被替代.该方法即返回false和一个PEAR错误文本.
  $p_filelist参数可以是一组字符串,每个字符串代表一个文件名或者目录名,如果需要,则要带上它们的路径.该参数也可以是以空格分割开的文件或目录名组成的字符串.
  如果存在的话,在$p_remove_dir中声明的路径将从每个列出来的文件/目录已记录路径中删除.默认没有任何东西被删除(空路径"").
  在$p_add_dir中声明的路径将会加在每一个列出来的文件/目录的已记录路径的开始.但是它也可设为空"".路径的添加将会在路径的删除之前(译注:即先去掉$p_remove_dir,再加上$p_add_dir).
  这种路径的添加/删除能力使得用户可以在一个不同的路径中准备好解压用的压缩包,而不是源文件所在.
  参阅addModify()方法查看文件添加的特性.
参数 :
  $p_filelist : 一组文件名和目录名,或者以单个空格分割开的文件或目录名组成的字符串.
  $p_add_dir : 一个字符串,包含欲加到列表中每一个元素的已记录路路径中的一个路径.
  $p_remove_dir : 一个字符串,包含一个路径,如果关联的话,则从列表中每一个元素的已记录路径删除.
返回值 :
  成功返回true,错误返回false.
样例 1 :

  $tar_object = new Archive_Tar("tarname.tar");
  
$tar_object->setErrorHandling(PEAR_ERROR_PRINT);  // 可选的错误处理
  
$v_list[0]="file.txt";
  
$v_list[1]="data/"; (末尾'/'为可选)
  
$v_list[2]="file.log";
  
$tar_object->createModify($v_list,"install");
  
// 存储在压缩包中的文件形如 :
  //   install/file.txt
  //   install/data
  //   install/data/file1.txt
  //   install/data/... 所有data下的文件和子目录/
  //   install/file.log

样例 2 :
  $tar_object = new Archive_Tar("tarname.tar");
  
$tar_object->setErrorHandling(PEAR_ERROR_PRINT);  // 可选的错误处理
  
$v_list[0]="dev/file.txt";
  
$v_list[1]="dev/data/"; (末尾'/'为可选)
  
$v_list[2]="log/file.log";
  
$tar_object->createModify($v_list,"install","dev");
  
// 存储在压缩包中的文件形如 :
  //   install/file.txt
  //   install/data
  //   install/data/file1.txt
  //   install/data/... 所有data下的文件和子目录/
  //   install/log/file.log

如何工作 :
  以可写的模式打开文件(如果已经存在,则擦除),调用_addList()方法,在一个空压缩包加入文件,加入尾部(512字节的区块),关闭tar文件.


方法 : addModify($p_filelist, $p_add_dir, $p_remove_dir="")
描述 :
  该方法在已存在的压缩包的末尾加入$p_filelist所列的文件/目录.如果压缩包尚未存在,那么就被创建.
 
  $p_filelist参数可以是一组字符串,每个字符串代表一个文件名或者目录名,如果需要,则要带上它们的路径.该参数也可以是以空格分割开的文件或目录名组成的字符串.
  如果存在的话,在$p_remove_dir中声明的路径将从每个列出来的文件/目录已记录路径中删除.默认没有任何东西被删除(空路径"").
 
  在$p_add_dir中声明的路径将会加在每一个列出来的文件/目录的已记录路径的开始.但是它也可设为空"".路径的添加将会在路径的删除之前(译注:即先去掉$p_remove_dir,再加上$p_add_dir).
  这种路径的添加/删除能力使得用户可以在一个不同的路径中准备好解压用的压缩包,而不是源文件所在.
  如果文件/目录已经存在于压缩包,它将只被加在压缩包的末尾.已存在的压缩的文件和路径并没有任何更新.但是,当解压时,最后的文件将会替代第一个.结果是压缩尺寸的未优化.
  如果文件/目录不存在,该文件/目录就被忽略.但一个错误文本将会发送到PEAR错误里.
  如果文件/目录不可读,该文件/目录就被忽略.但一个错误文件将会发送到PEAR错误里.
  如果结果文件名/路径名(在添加/删除之后或者没有这些动作)字符串多于99个字符,该文件/目录将被忽略.但一个错误文本将会发送到PEAR错误里.
 参数 :
  $p_filelist : 一组文件名和目录名,或者以单个空格分割开的文件或目录名组成的字符串.
  $p_add_dir : 一个字符串,包含欲加到列表中每一个元素的已记录路路径中的一个路径.
  $p_remove_dir : 一个字符串,包含一个路径,如果关联的话,则从列表中每一个元素的已记录路径删除.
返回值 :
  成功返回true,错误返回false.
样例 1 :

  $tar_object = new Archive_Tar("tarname.tar");
  [...]
  
$v_list[0]="dev/file.txt";
  
$v_list[1]="dev/data/"; (末尾'/'为可选)
  
$v_list[2]="log/file.log";
  
$tar_object->addModify($v_list,"install");
  
// 存储在压缩包中的文件形如 :
  //   install/file.txt
  //   install/data
  //   install/data/file1.txt
  //   install/data/... 所有data下的文件和子目录/
  //   install/file.log

样例 2 :
  $tar_object = new Archive_Tar("tarname.tar");
  [...]
  
$v_list[0]="dev/file.txt";
  
$v_list[1]="dev/data/"; (末尾'/'为可选)
  
$v_list[2]="log/file.log";
  
$tar_object->addModify($v_list,"install","dev");
  
// 存储在压缩包中的文件形如 :
  //   install/file.txt
  //   install/data
  //   install/data/file1.txt
  //   install/data/... 所有data下的文件和子目录/
  //   install/log/file.log

如何工作 :
  如果压缩包不存在,则创建并加入文件.
  如果压缩包确实存在但未被压缩,则打开它,跳到组后512字节空区块(tar脚部),并在该点加入文件.
  如果压缩包确实存在且被压缩,将会创建一个临时拷贝文件.这个临时文件是以'gzip'方式一块接着一块直至最终空区块读取的结果.新的文件此时被加到压缩文件中.
  文件的添加是通过遍历文件/目录列表,然后加进每个文件,以一个递规的方式遍历目录.每一次一个路径都需要添加/删除,在在压缩包写入文件头部之前完成这项工作.
 

方法 : add($p_filelist)
描述 :
  该方法把$p_filelist里列出的文件/目录加入到已经存在的压缩包中去.如果压缩包尚未存在,则创建之.
  $p_filelist参数可以是一组字符串,每个字符串代表一个文件名或者目录名,如果需要,则要带上它们的路径.该参数也可以是以空格分割开的文件或目录名组成的字符串.
  参阅addModify()方法查看细节和限制.
参数 :
  $p_filelist : 一组文件名和目录名,或者以单个空格分割开的文件或目录名组成的字符串.
返回值 :
  成功返回true,错误返回false.
样例 1 :

  $tar_object = new Archive_Tar("tarname.tar");
  [...]
  
$v_list[0]="dev/file.txt";
  
$v_list[1]="dev/data/"; (末尾'/'为可选)
  
$v_list[2]="log/file.log";
  
$tar_object->add($v_list);
?>
样例 2 : <?php
  $tar_object
= new Archive_Tar("tarname.tgz",true);
  [...]
  
$v_list[0]="dev/file.txt";
  
$v_list[1]="dev/data/"; (末尾'/'为可选)
  
$v_list[2]="log/file.log";
  
$tar_object->add($v_list);

如何工作 :
  用正确的参数简单地调用addModify()方法.

方法 : addString($p_filename, $p_string)
描述 :
  该方法在已存在压缩包末尾以文件的形式加入一单个字符串.如果压缩包尚未存在,则创建之.
参数 :
  $p_filename : 一个字符串,包含将与该字符串相关联的文件全部路径.
  $p_string :   加入到压缩包文件中的内容.
返回值 :
  成功返回true,错误返回false.
样例 1 :

  $v_archive = & new Archive_Tar($p_filename);
  
$v_archive->setErrorHandling(PEAR_ERROR_PRINT);
  
$v_result =$v_archive->addString('data/test.txt','这是字符串文本');


方法 : extract($p_path = "")
描述 :
  该方法在一个由$p_path声明的目录中解出所有压缩包里的内容.$p_path是可选的,如果没有设置,压缩包就在当前目录被解压.
  当解压一个文件时,如果目录路径不存在,则该目录路径会被创建.
  查阅extractModify()查看细节和限制.
参数 :
  $p_path : 可选的路径,为文件/目录需要解压到的地方.
返回值 :
  成功返回true,错误返回false.
样例 :

  $tar_object = new Archive_Tar("tarname.tar");
  
$tar_object->extract();

如何工作 :
  用恰当的参数简单的调用extractModify()方法.

方法 : extractModify($p_path, $p_remove_path)
描述 :
  该方法在由$p_path声明的目录里解出压缩包所有内容.如果是关联的,文件/目录的已记录路径可以在文件/路径开头因删除了$p_remove_path路径而改变.
  当解压一个文件时,如果目录路径不存在,则创建之.
  当解压一个文件时,如果文件已经存在,那么不必查看最后修改日期即会被替代.
  当解压一个文件时,如果一个文件已经存在且为写保护,则解压会被中止.
  当解压一个文件时,如果具有同样名称的目录已经存在,则解压会被中止.
  当解压一个目录时,如果具有同样名称的文件已经存在,则解压会被中止.
  当解压一个文件/目录时,如果目标目录存在且为写保护,或者不存在但不能创建,则解压会被中止.
  如果在解压之后,一个已解出文件与存储文件尺寸不一致,则解压会被中止.
  当解压被中止时,一个PEAR文本会被发送,并且返回false.但是结果可能时需要手工清理的一部分解出的东西.
参数 :
  $p_path : 为文件/目录需要解压到的地方.
  $p_remove_path : 已记录路径的一部分,如果出现在文件/目录路径的开头,就可以被删除.
返回值 :
  成功返回true,错误返回false.
样例 :

  // 设想一个含下列文件的tarname.tar :
  //   dev/data/file.txt
  //   dev/data/log.txt
  //   readme.txt
  
$tar_object = newArchive_Tar("tarname.tar");
  
$tar_object->extractModify("install","dev");
  
// 文件将被解压到那里(译注:install目录下) :
  //   install/data/file.txt
  //   install/data/log.txt
  //   install/readme.txt

如何工作 :
  打开压缩包,调用一个可以解压压缩包一部分或全部的更通用的函数.
  查阅extractList()方法查看更多细节.

方法 : extractInString($p_filename)
描述 :
  该方法从压缩包中解出一个由$p_filename声明的文件.
  返回一个含文件内容的字符串或者错误时返回NULL.
参数 :
  $p_filename : 要解出内容到一字符串的路径.
返回值 :
  一个含文件内容的字符串或者NULL.
样例 :

  // 设想一个含下列文件的tarname.tar :
  //   dev/data/file.txt
  //   dev/data/log.txt
  //   dev/readme.txt
  
$v_archive = & newArchive_Tar('tarname.tar');
  
$v_archive->setErrorHandling(PEAR_ERROR_PRINT);
  
$v_string =$v_archive->extractInString('dev/readme.txt');
  echo
$v_string;

方法 : listContent()
描述 :
  该方法返回一列数组(译注:即为二维数组),用来描述每一个在压缩包里的文件/目录.
  该数组没有被排序,所以它可以示意文件在压缩包中的位置.
  文件的信息有:
    $file[filename] : 文件/目录的名称和路径.
    $file[mode] : 文件权限(为fileperms()的结果)
    $file[uid] : 用户id
    $file[gid] : 用户组id
    $file[size] : 文件尺寸
    $file[mtime] : 最后修改时间(为filemtime()的结果)
    $file[typeflag] : 对文件来说为"", 对目录来说为"5"
参数 :
返回值 :
  一列数组或者错误返回0.
样例 :

  $tar_object = new Archive_Tar("tarname.tar");
  if ((
$v_list  =  $tar_object->listContent()) != 0)
    for (
$i=0;$i<sizeof($v_list);$i++)
    {
      echo
"Filename :'".$v_list[$i][filename]."'<br>";
      echo
" .size :'".$v_list[$i][size]."'<br>";
      echo
" .mtime :'".$v_list[$i][mtime]."' (".
           
date("l dS of F Y h:i:s A",$v_list[$i][mtime]).")<br>";
      echo
" .mode :'".$v_list[$i][mode]."'<br>";
      echo
" .uid :'".$v_list[$i][uid]."'<br>";
      echo
" .gid :'".$v_list[$i][gid]."'<br>";
      echo
" .typeflag :'".$v_list[$i][typeflag]."'<br>";
    }

    如何工作 :
  和extract调用同样的函数,但是带一个标记只遍历压缩包,并不解出文件.


方法 : extractList($p_filelist, $p_path = "", $p_remove_path = "")
描述 :
  该方法只从压缩包中解出在$p_filelist声明的文件.这些文件被解到当前目录或者到一个由可选参数$p_path声明的目录里.
  如果声明了$p_remove_path,那么可以和它在extractModify()方法里的用法一样应用.
参数 :
  $p_filelist : 一组文件名和目录名,或者以单个空格分割开的文件或目录名组成的字符串.
  $p_path : 为文件/目录需要解压到的地方.
  $p_remove_path : 已记录路径的一部分,如果出现在文件/目录路径的开头,就可以被删除.
返回值 :
  成功返回true,错误返回false.
样例 :

  // 设想一个含下列文件的tarname.tar :
  //   dev/data/file.txt
  //   dev/data/log.txt
  //   readme.txt
  
$tar_object = newArchive_Tar("tarname.tar");
  
$tar_object->extractList("dev/data/file.txt readme.txt","install",
                           
"dev");
  
// 文件将被解压到那里(译注:install目录下) :
  //   install/data/file.txt
  //   install/readme.txt

如何工作 :
  遍历压缩包,只解压出列表中出现的文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值