PHP生成zip压缩包的常用方法示例

本文实例讲述了PHP生成zip压缩包的常用方法。分享给大家供大家参考,具体如下:

压缩一个文件

我们将一个文件生成一个压缩包。

1
2
3
4
5
6
7
<?php
$path "c:/wamp/www/log.txt";
$filename "test.zip";
$zip new ZipArchive();
$zip->open($filename,ZipArchive::CREATE);  //打开压缩包
$zip->addFile($path,basename($path));  //向压缩包中添加文件
$zip->close(); //关闭压缩包

上述代码将c:/wamp/www/log.txt文件压缩生成了test.zip,并保存在当前目录。

压缩多个文件

压缩多个文件,其实就是addFile执行多次,可以通过数组的遍历来实现。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$fileList array(
  "c:/wamp/www/log.txt",
  "c:/wamp/www/weixin.class.php"
);
$filename "test.zip";
$zip new ZipArchive();
$zip->open($filename,ZipArchive::CREATE);  //打开压缩包
foreach($fileList as $file){
  $zip->addFile($file,basename($file));  //向压缩包中添加文件
}
$zip->close(); //关闭压缩包

压缩一个目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function addFileToZip($path,$zip){
  $handler=opendir($path); //打开当前文件夹由$path指定。
  while(($filename=readdir($handler))!==false){
    if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作
      if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
        addFileToZip($path."/".$filename$zip);
      }else//将文件加入zip对象
        $zip->addFile($path."/".$filename);
      }
    }
  }
  @closedir($path);
}
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
  addFileToZip('rsa/'$zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
  $zip->close(); //关闭处理的zip文件
}

压缩并下载zip包

我的时候,我们需要打包之后,提供下载,然后删除压缩包。

可以分为以下几步:

  1. 判断给出的路径,是文件夹,还是文件。文件夹还需要遍历添加文件。

  2. 设置相关文件头,并使用readfile函数提供下载。

  3. 使用unlink函数删除压缩包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
function addFileToZip($path,$zip){
  $handler=opendir($path); //打开当前文件夹由$path指定。
  while(($filename=readdir($handler))!==false){
    if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作
      if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
        addFileToZip($path."/".$filename$zip);
      }else//将文件加入zip对象
        $zip->addFile($path."/".$filename);
      }
    }
  }
  @closedir($path);
}
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
  $path 'rsa/';
  if(is_dir($path)){ //给出文件夹,打包文件夹
    addFileToZip($path$zip);
  }else if(is_array($path)){ //以数组形式给出文件路径
    foreach($path as $file){
      $zip->addFile($file);
    }
  }else{   //只给出一个文件
    $zip->addFile($path);
  }
  $zip->close(); //关闭处理的zip文件
}

更多关于PHP相关内容感兴趣的读者可查看本站专题: PHP专题

本文链接:http://likelys.com/article/10564 posted @ 2021-01-26 20:09:42
收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
  • 评论
13人参与,13条评论
  • 最新评论
2023年4月14日 14:14 假洒脱 [新疆维吾尔自治区米东区网友]

很有意思

2023年4月14日 13:41 杀剑 [江西省大余县网友]

一和尚在街头卖艺。开始有4个城管叫他走,他没有理会,后来了一车城管,拿棒子准备打架的状态。和尚说这里是中国人的地方我就不走,要打架,我不怕你人多,随后大叫一声,用手直接把砖头敲碎了,城管老大看见后说,你要讲道理,出家人不要喊打喊杀的

2023年4月14日 13:11 异魂梦 [山西省介休市网友]

酱油,路过

2023年4月14日 11:52 青春的年少轻狂

我是救护医生,今天一个病人对我说他只有6个月好活了,我想说点鼓励的话,但是最后说的是:”六个月,很快就过去了,坚强点0

2023年4月14日 10:57 一寒如此 [山东省博兴县网友]

我是来看评论的

2023年4月14日 5:42 笄发醒

经典笑话:窃听器 新婚夫妻蜜月旅行,住进一家客店.晚上新郎正要关灯,新娘不安地问新郎:“屋里会不会有窃听器?“ “不会有,亲爱的.“新郎安慰她. “万一有窃听器那多难堪!“ 新郎四处查看.最后掀开地毯,果然发现一个小巧的玩艺儿.新郎拧开外圈,除去中间的硬块后上床去了. 第二天早上侍者叫醒了这对夫妻,问他们昨晚睡得可好? “很好,谢谢!“新郎不满地问,“干么这么早来打搅我们?“ “非常抱歉!“侍者说,“因为住在你们楼下的夫妻昨晚发觉有只吊灯落在他们身......

2023年4月14日 3:22 怒默语晨 [安徽省歙县网友]

很有意思

2023年4月14日 2:32 风惠 [云南省思茅区网友]

顶!!

2023年4月13日 23:41 流绪微梦 [广西壮族自治区兴安县网友]

读万卷书 行万里路

2023年4月13日 21:31 戏如人生

我是男教师。痔疮犯了,垫了一片卫生巾(卫生巾是太太的)。在学校打篮球的时候,那该死的东西顺着裤腿掉了出来,上边还有血~~~ 球场周围围了很多学生看球,NND,拾也不是不拾也不行……

2023年4月13日 20:37 月晓新城

客户:闻大师才高八斗,琴棋书画,样样精通,我想和你切磋一下! 设计师:我怎么可以以专业欺外行呢? 客户:文学切磋是不分辈份的!如果你对不出来,别怪我另寻他家!接招吧! 客户:一单两谈三方案,不思四风五格六式,竟做七八九流设计,十分无聊! 设计师:十单九宰,赚得八门七部六室五组四人,人人三千两百,一个煞笔! 客户:好工整啊! 客户:行业里,钱不高单不少,小设计师累死拉倒! 设计师:稿纸上,刀无影剑无光,叫声业主当心钱包! 群众:好好,对得好!......

按钮 内容不能为空!
立刻说两句吧! 查看13条评论
top