PHP生成zip压缩包

压缩一个文件

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

<?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执行多次,可以通过数组的遍历来实现

<?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();  //关闭压缩包

压缩一个目录

<?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函数删除压缩包

    <?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文件
    }
时间: 2024-08-06 15:19:13

PHP生成zip压缩包的相关文章

通过javascript在网页端生成zip压缩包并下载

原文:通过javascript在网页端生成zip压缩包并下载 zip.js是什么 zip.js的github项目地址:http://gildas-lormeau.github.io/zip.js/ 通过zip.js封装一个能在网页端生成zip文件的插件, 直接在网页中创建包含文件夹和文件的压缩包,也可以自定义名字并下载: 如何使用: 1:引用zip.js 2:引用jQuery; 3:并引用封装的ZipArchive.js ,(因为zip.js的api使用起来比较繁琐,所以自己封装实现了这个插件)

php生成zip压缩文件的方法,支持文件和压缩包路径查找

/* * new creatZip($_dir,$_zipName); *@ _dir是被压缩的文件夹名称,可使用路径,例 'a'或者'a/test.txt'或者'test.txt' *@ _zipName是压缩后的压缩包名称,可使用路径,例 'a/test.zip'或者'test.zip' **/ class creatZip { private $_dir; private $_zipDir; private $_zipName; public function __construct($d

java后台生成zip打包文件

/** * * @param zipFile 压缩包文件对象 * @param listKey 压缩的图片物理地址 * @return */ public static boolean packageZip(File zipFile,List<String> listKey){ //图片打包操作 ZipOutputStream zipStream = null; FileInputStream zipSource = null; BufferedInputStream bufferStream

java生成zip压缩文件,解压缩文件

1.生成zip public static void main(String[] args) { try { // testZip("c:\\temp.txt", "c:\\temp4.zip"); // testZip("c:\\Result.txt", "c:\\temp4.zip"); //不然会被一个文件覆盖了. //压缩多个文件的关键: ZipOutputStream out 作为参数传递. //一个流,否则存在覆盖

MySQL8.0 zip压缩包版本 Windows下安装

MySQL zip压缩包版本 Windows下安装 Download MySQL Community Server 解压到相应的目录 我的解压目录:D:\Program Files\mysql-8.0.17-winx64 创建MySQL配置文件 在解压的文件价下创建my.ini文件:编辑my.ini配置以下基本信息: [client] # Set the mysql client default character set default-character-set=utf8 [mysqld]

Java中往zip压缩包追加文件

有个需求,从某个接口下载的一个zip压缩包,往里面添加一个说明文件.搜索了一下,没有找到往zip直接添加文件的方法,最终解决方法是先解压.再压缩. 具体过程如下: 1.一个zip文件的压缩和解压工具类 压缩和解压工具类来自https://www.iteye.com/blog/songfeng-123-2243016,但是原文代码因为用的是Java自带的java.util.zip,有中文乱码的bug,所以需要修改部分代码,并且修改为引用org.apache.tools.zip.*,pom.xml加

使用JAVA解压加密的中文ZIP压缩包

近来项目中需要对ZIP压缩包解压,然后将解压后的内容存放到指定的目录下. 该压缩包的特性: 使用标准的zip压缩格式(压缩算法没有深入探究) 压缩包中带有目录并且目录名称是中文 压缩时加了密码 因为jre中自带的java.util.zip.*包不支持中文及加密压缩,所以选择使用zip4j包. 下面是解压的实现代码: 1 public class UnZip { 2 private final int BUFF_SIZE = 4096; 3 4 /* 5 获取ZIP文件中的文件名和目录名 6 */

java直接生成zip压缩文件精简代码(跳过txt文件)

/** * @param args */ public static void main(String[] args) throws Exception{ ZipOutputStream zos = null; zos = new ZipOutputStream(new FileOutputStream("c:\\temp7.zip")); String ss = "cName\t\tcCode\t\tcreateDate\n"; ss += "dbc券9

动态生成Zip

动态生成Zip文档 通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成zip文件. 文件流操作相信.net dev们不会陌生,ZipArchive既可以在内存中创建zip文档,也可以创建到新的zip文件中.因为ZipArchive类的构造函数需要传入一个Stream对象来读写,这个Stream可以是内存的流,当然也可以是文件流. 创建ZipArchive实例后,直接调用C