php压缩一个文件,多个文件,目录生成zip压缩包,压缩并下载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文件
}

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

可以分为以下几步:

判断给出的路径,是文件夹,还是文件。文件夹还需要遍历添加文件。
设置相关文件头,并使用readfile函数提供下载。
使用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文件
}
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个文件夹中的 ZIP 压缩包压缩,并以压缩包的名称进行重命名,对多个文件增加序号的示例程序: ```python import os import zipfile def unzip_files(directory): for filename in os.listdir(directory): if filename.endswith(".zip"): zip_file_path = os.path.join(directory, filename) extract_folder_path = os.path.splitext(zip_file_path)[0] with zipfile.ZipFile(zip_file_path, 'r') as zip_ref: zip_ref.extractall(extract_folder_path) rename_files(extract_folder_path) def rename_files(directory): file_counter = 1 for filename in os.listdir(directory): file_path = os.path.join(directory, filename) new_filename = f"{file_counter}_{filename}" new_file_path = os.path.join(directory, new_filename) os.rename(file_path, new_file_path) file_counter += 1 # 指定ZIP 压缩包目录 directory = 'path/to/your/directory' unzip_files(directory) ``` 将上述代码中的 `'path/to/your/directory'` 替换为ZIP 压缩包目录路径。在这个示例程序中,我们假设你需要解压缩目录中的所有 ZIP 压缩包,并以压缩包的名称进行重命名。 程序中,我们首先使用 `os.listdir()` 函数遍历目录中的所有文件,筛选出以 ".zip" 结尾的文件。然后,我们构造了 ZIP 压缩包的路径和解压缩后的文件夹路径,通过使用 `zipfile.ZipFile()` 类解压缩 ZIP 压缩包到指定的文件夹。 接下来,我们调用 `rename_files()` 函数对解压缩后的文件进行重命名。在这个函数中,我们使用一个计数器来生成序号,并将序号和原始文件名组合成新的文件名。然后,使用 `os.rename()` 函数进行文件重命名。 请确保你已经安装了 Python,并且导入了 os 和 zipfile 模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hanzhuhuaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值