技术开发 频道

PHP和PEAR动态创建和编辑TAR文档

  【IT168 技术文档】创建TAR 文档

  让我们从一个简单的例子开始:动态创建包含几个文件的TAR文档。使用下面的脚本:

  列表 A  

  include ('Archive/Tar.php');// import class   $obj = new Archive_Tar('dummy.tar'); // name of archive   $files = array('mystuff/ad.gif',   'mystuff/alcon.doc',   'mystuff/alcon.xls'); // files to store in archive   if ($obj->create($files)) {   echo 'Created successfully!';   } else {   echo 'Error in file creation';   }   >

  这个脚本相当简单,但是还是值得具体看一下:

  首先,创建Archive_Tar类的一个实例,初始化创建文档的路径和文件名。在本例中,文件名是dummy.tar,存于当前目录。

  其次,列出归档的所有文件,包括它们的磁盘地址,存于一个PHP数组中。脚本(更准确的说是运行脚本的用户)必须拥有访问这些磁盘地址的许可权,否则文档创建过程就会失败。

  最后,creat()方法将所有的文件压缩到单个TAR文档。这个方法接受输入的文件名数组,返回一个布尔值表明文档是否成功创建。记住脚本必须拥有将文件写入命名磁盘地址的许可权,否则,creat()方法就无法使用,文档创建就会失败。

  应用上面例子中的脚本,修改$files数组的内容以反映你的本地系统配置,在命令行或者浏览器中试着执行它,如果一切正常的话,脚本将会查找并读取这些文件到一个命名为dummy.tar的TAR文档中。

 

  查看TAR 文档内容

  如何查看已经存在的TAR文件的内部信息呢?Archive_Tar类有一个listContent()方法,该方法可以查看一个TAR包中的每个组件的详细信息。列表B显示了如何使用它:

  列表 B  

  include ('Archive/Tar.php');// import class   $obj = new Archive_Tar('dummy.tar'); // name of archive   $files = $obj->listContent();// array of file information   foreach ($files as $f) {   foreach ($f as $k => $v) {   echo "$k: $vn";   }   echo "n";   }   >

  listContent()方法的输出是一个结构化数组,每个数组元素代表文档中的一个文件。典型的是,每个元素有相应文件的名字信息,它的许可模式,所有者和组用户的ID,状态,大小和上一次修改的时间。通过一个循环可以很容易的提取这些信息,然后再对格式稍作修改使它根据表达性,像上面的例子中提到的。下面是一个输入示例:

  校验和:3872

  文件名:mystuff/alcon.doc

  模式:33206

  用户ID:433

  组ID:106

  大小:41472

  时间:1140358031

  向已经存在的TAR 文档中添加文件

  由于我们大家的健忘性,有时可能忘记某个文件,Archive_Tar 类通过add()方法提供了

  向已经存在的文档中添加新文件的能力。为了演示,我们再回到上文的dummy.tar文档,试着给它添加一个新文件(列表C):

  列表C  

  include ('Archive/Tar.php');// import class   if (file_exists('dummy.tar')) {   $obj = new Archive_Tar('dummy.tar'); // name of TAR file   } else {   die('File does not exist');   }   $files = array('otherstuff/logo.gif',   'otherstuff/header.gif',   'morestuff/berlin-bear.psd'); // additional files   if ($obj->add($files)) {   echo 'Added successfully!';   } else {   echo 'Error in file addition';   }   >

 

  从已经存在的TAR 文档中提取文件

  在你将文件存入文档之后,如何读取它们呢?使用extractList()方法,显然,这个方法可以从一个已经存在的文档中提取一个或多个文件到一个指定目录,如列表D:

  列表D  

  include ('Archive/Tar.php');// import class   if (file_exists('dummy.tar')) {   $obj = new Archive_Tar('dummy.tar'); // name of TAR file   } else {   die('File does not exist');   }   $files = array('otherstuff/logo.gif',   'mystuff/alcon.doc'); // files to extract   if ($obj->extractList($files, 'unpackaged/')) {   echo 'Extracted successfully!';   } else {   echo 'Error in file extraction';   }   >

  这里,要提取文件数组传递给extractlist()方法,同时包括提取文件存入的目录名。注意的是文件将连同它们的内部目录结构一起被提取出来(虽然这个行为可以通过传递特殊参数给extractlist()方法进行修改)。

  除了这种可选择提取,还可以使用extract()方法,这个方法解压整个文档,提取所有文件到一个指定目录。如果这个目录不存在,它将通过extract()方法自动创建,当然要假设脚本据有些磁盘的许可权。列表E显示如何去做:

  列表E  

  include ('Archive/Tar.php'); // import class   if (file_exists('dummy.tar')) {   $obj = new Archive_Tar('dummy.tar'); // name of TAR file   } else {   die('File does not exist');   }   if ($obj->extract('unpackaged/')) {   echo 'Extracted successfully!';   } else {   echo 'Error in file extraction';   }   >

  如上面的例子演示,PEAR的Archive_Tar类是多功能的,它允许你仅用几行简单的代码就可以执行一些相当复杂的TAE行为。希望本文中的示例脚本对你在日常的开发活动中使用Archive_Tar类有所帮助。

0
相关文章