精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网站开发>PHP教程>正文

如何用PHP脚本和PEAR类创建ZIP档案文件


来源: 时间:07-02-23 点击: 点击这里收藏本文

查看ZIP档案文件的内容

那么怎么样看到现有的ZIP档案文件中的内容呢?Archive_Zip lets让您通过它的listContent()方法也可以做到这一点。下面是一个例子(列表B):

列表B

<?php
include ('Archive/Zip.php');        // imports

$obj = new Archive_Zip('test.zip'); // name of zip file

$files = $obj->listContent();       // array of file information

foreach ($files as $f) {
    foreach ($f as $k => $v) {
        echo "$k: $v ";
    }
    echo " ";
}
?>

listContent()的输出是一个由数组组成的结构数组,每一个数组元素代表档案文件中的一个单独文件。通常,每一个元素中保存有相关的信息,例如对应文件的名字、它的索引位置、状态、大小(压缩后和压缩前的)和最近一次修改的时间。用一个循环可以很容易地将这些信息提取出来,还可以像列表B那样,重定它的格式,使其更好传输。下面是输出的一个示例(列表C):

列表C

filename: mystuff/alcon.xls
stored_filename: mystuff/alcon.xls
size: 113664
compressed_size: 35902
mtime: 1141996836
comment:
folder:
index: 0
status: ok

向现有的ZIP档案文件中添加新文件

Archive_Zip类的一个有意思的特性就是它可以通过add()方法向现有的档案文件中添加新的文件。为了说明这一点,让我们回到test.zip,尝试对它添加新文件(列表D):

列表D

<?php
include ('Archive/Zip.php');        // imports

if (file_exists('test.zip')) {
    $obj = new Archive_Zip('test.zip'); // name of zip file
} else {
    die('File does not exist');
}

$files = array('otherstuff/montecarlo.png');   // additional files to store

if ($obj->add($files)) {
    echo 'Added successfully!';
} else {
    echo 'Error in file addition';
}
?>

正如您所看到的那样,向一个现有的档案文件中添加新文件的程序和创建一个新的档案文件十分相似:初始化一个新的Archive_Zip对象指向问号代表的档案文件,创建一个数组代表将要添加的文件的列表,然后将这个数组输入add()方法。和create()方法一样,add()返回一个布尔逻辑信号来指示添加是否成功。和前面一样,一个主要的问题就是别忘了要有足够的权限:记得确保脚本有适当的权限来读取源文件,并将新压缩的档案文件写回到硬盘中。

从现有的ZIP档案文件中删除文件

和添加文件一样,您也可以删除文件。Archive_Zip类具有delete()方法,让您能够从现有的档案文件中移除文件。列表E说明了这一点。.

列表E

<?php
include ('Archive/Zip.php');        // imports

if (file_exists('test.zip')) {
    $obj = new Archive_Zip('test.zip'); // name of zip file
} else {
    die('File does not exist');
}

$files = array('mystuff/ad.gif', 'otherstuff/montecarlo.png');   // files to delete

if ($obj->delete(array('by_name' => $files))) {
    echo 'Deleted successfully!';
} else {
    echo 'Error in file deletion';     
}
?>

在这里,创建了一个待删除文件的数组,然后将其输入delete()方法。注意delete()调用中的特殊参数“by_name”:这告诉Archive_Zip只删除那些与文件名精确匹配的文件。如果删除成功,delete()方法返回真。

除了这种形式的有选择的删除之外,delete()方法也支持对与特定类型或正则表达式相匹配文件的大规模的摧毁。利用“by_ereg”或“by_preg”参数,Perl和PHP的正则表达式都支持。列表F是一个例子,用来说明怎样用这种方法,通过利用Perl的正则表达式来删除一个档案文件中所有的*.doc文件。

列表F


<?php
include ('Archive/Zip.php');        // imports

if (file_exists('test.zip')) {
    $obj = new Archive_Zip('test.zip'); // name of zip file
} else {
    die('File does not exist');
}

if ($obj->delete(array('by_preg' => "/.*doc$/"))) { // all DOC files
    echo 'Deleted successfully!';
} else {
    echo 'Error in file deletion';    
}
?>

如以上的例子所示,PEAR的Archive_Zip类用途很多,只需要几行代码,就使您能够执行一些相当复杂的与ZIP文件的交互。但愿上面的示例脚本能够激发起您的灵感,告诉您如何在您的日常开发活动中使用这个类,并让您对用它进行试验产生兴趣。祝您编程开心!

9 7 3 1 2 4 8 :

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.