`
qzriso
  • 浏览: 236572 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

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

    博客分类:
  • php
阅读更多

如果你曾为你的UNIX系统下载过widget,那么你肯定遇到过TAR压缩文件。在UNIX系统中磁带归档文件格式常用于打包多个文件,以便于分发。

这种格式的流行不仅由于在所有UNIX系统中都存在该格式的创建工具,还因为在实际应用中,它便于保存归档文件的目录结构、许可信息、用户和组信息等。

PHP中有大量的内建函数和可连接的扩展库,可用于几乎所有文件格式。特别是它可以通过PEAR的Archive_Tar类读取和创建TAR文档。在本文中,我们将向你说明这个类的行为,并演示开发人员是如何利用它动态地创建,编辑和显示TAR文档二手电脑回收。

在这里我将假设你有一个工作数据库和安装了PHP,并且正确的安装了PEAR的Archive_Tar类。

注:你可以直接从网上安装PEAR 的Archive_Tar类包,或者从网上下载安装。

创建TAR文档

让我们从一个简单的例子开始:二手电脑回收动态创建包含几个文件的TAR文档。使用下面的脚本:
列表 A

<php
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
<php
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

<php
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

<php

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

<php
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类有所帮助。

 

分享到:
评论

相关推荐

    PHP核心教程 php pear php pear

    PHP核心教程 php pear php pear php pear php pear php pear php pear

    php-pear install

    php pear install pear安装包

    php-7.0.27.tar.gz

    编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...

    pear文档手册

    php扩展包pear手册,学习php语言必备的工具之一。。

    Foundations of PEAR_ Rapid PHP Development.pdf

    This first chapter of the book discusses how to install PEAR and how to use the PEAR package manager. It also discusses how to configure PEAR. If you’ve already been using the PEAR package manager ...

    PEAR:创建中间的数据库应用层

    PEAR 博文链接:https://spamer.iteye.com/blog/158148

    PEAR

    下载后在PHP安装目录下建立一个Pear目录,然后解压进去,再在PHP.ini中的include_path中加入这个路径,就可以使用了。这个包是我最近才更新的,因为Pear是实时更新的,所以并不保证是最新版,有能力自己安装的朋友...

    php-7.3.7.tar.gz

    编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...

    PHP学习-PEAR、PECL的应用.pdf

    pear是PHP的面向对象API框架集,其中包含了很多实用的类,比如PHP发送邮件,模拟路由器的HTTP认证,以及解决不同数据库移植问题的adodb数据库操作类,以及如何用PHP读写pdf的FPDF类,pecl是PHP的C语言API,列觉了...

    php-pear go-pear.phar

    php5以上版本中都没有go-pear.phar,需要自行下载到目录并运行,注意配置时目录要选择all,目录自行设置,默认目录有重复,会产生错误。

    php-7.2.20.tar.gz

    编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...

    php-7.1.29.tar.gz

    编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...

    php-7.3.0.tar.gz

    ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=...

    PHP PEAR 安装包

    PHP PEAR 安装包 go-pear.phar

    php_pear_smarty_manual

    php_pear_smarty_manual打包手册 零资源分方便大家下载

    php-7.2.26.tar.xz

    安装完编译工具和依赖后,我们需要为 FPM 分配一个运行用户和用户组(我们取名 php-fpm:php-fpm 并设置不予怒登录和不创建家目录): groupadd php-fpm && useradd -s /sbin/nologin -g php-fpm -M php-fpm 现在...

    PEAR教程PEAR教程PEAR教程

    不用多说了,一本pear的好书,值得下载,机不可失 不用多说了,一本pear的好书,值得下载,机不可失 不用多说了,一本pear的好书,值得下载,机不可失 不用多说了,一本pear的好书,值得下载,机不可失

    安装pear和phpunit

    安装pear,phpunit,所有的错误,帮助你解决难题。

    PHP Programming With PEAR

    PHP Programming With PEAR很好的PHP框架学习

Global site tag (gtag.js) - Google Analytics