最近接到一个需求,就是选择多个文件下载时,不要一个一个下载,直接把多个文件打包成一个文件进行下载。我们项目是前后端分离,所以我写了个接口,让前端传参数,后台下载。

废话不多说,直接上代码:

先是压缩单个文件的:

$zip = new ZipArchive;
$zip_time = time().".zip"; // 压缩的目录名
$zip_filename = $zip_time; // 指定一个压缩包地址 $zip->open($zip_filename, ZIPARCHIVE::CREATE); // 打开压缩包,没有则创建 // 参数1是要压缩的文件,参数2为压缩后,在压缩包中的文件名
//如果需要的压缩后的文件跟原文件名一样 addFile() 的第二个参数可以改为 basename("../alg/demo1.php"),也就是原文件所在的路径
$zip->addFile("log.txt",basename("log.txt"));
$rs = $zip->close();
var_dump($rs);

  

多个文件下载打包成一个文件的:

<?php

function zipfile($file_path)
{
// 压缩多个文件
$fileList = explode(',', $file_path);
$filename = time() . ".zip"; // 压缩包所在的位置路径
$zip = new ZipArchive();
$zip->open($filename, ZipArchive::CREATE); //打开压缩包
foreach ($fileList as $file) {
$zip->addFile($file, basename($file)); //向压缩包中添加文件
}
$rs = $zip->close(); //关闭压缩包 //下载文件
$file = fopen($filename, "r");
//返回的文件类型
Header("Content-type: application/octet-stream");
//按照字节大小返回
Header("Accept-Ranges: bytes");
//返回文件的大小
Header("Accept-Length: " . filesize($filename));
//这里设置客户端的弹出对话框显示的文件名
Header("Content-Disposition: attachment; filename=" . $filename);
//一次性将数据传输给客户端
//echo fread($file, filesize($filePath));
//一次只传输1024个字节的数据给客户端
//向客户端回送数据
$buffer = 1024;//
//判断文件是否读完
while (!feof($file)) {
//将文件读入内存
$file_data = fread($file, $buffer);
//每次向客户端回送1024个字节的数据
echo $file_data; }
//将生成的zip文件在服务器端删除,只需要客户端下载就行了
@unlink($filename); } zipfile('D:\phpstudy_pro\WWW\log.txt,D:\phpstudy_pro\WWW\index.html');
前端传的参数是以逗号分隔传给我的路劲。

 

php压缩文件zip格式并打包(单个或多个文件压缩)的更多相关文章

  1. java实现将文件压缩成zip格式

    以下是将文件压缩成zip格式的工具类(复制后可以直接使用): zip4j.jar包下载地址:http://www.lingala.net/zip4j/download.php package util ...

  2. java压缩/解压缩zip格式文件

    因为项目要用到压缩.解压缩zip格式压缩包,只好自己封装一个,对于网上流行的中文乱码的问题,本文的解决方法是用apache的包代替jdk里的.基本上还是比较好用的. 废话少说,直接上代码. }     ...

  3. 【Maven jar】打包单个或多个文件,有依赖jar包的将架包一起打包成一个jar包供别的项目引用

    之前有一片文章,是打包单个java文件的.这次想要将http://www.cnblogs.com/sxdcgaq8080/p/8398780.html  打包成jar包,发现这个java文件中引用了多 ...

  4. webpack打包时排除其中一个css、js文件,或单独打包一个css、js文件

    在项目中经常会需要将一些接口的配合文件或者某些样式文件,分离出来单独打包,便于后期改动,这里我以css文件为例,介绍实现两种方法: 项目目录: 如上图所示,现在我需要将项目中的scBtn.css文件单 ...

  5. python(49):把文件压缩成zip格式的文件

    有时需要用到压缩文件,网上搜集了一段代码: 分享一下: import os import zipfile def make_zip(localPath, pname): zipf = zipfile. ...

  6. 列出zip文件内全部内容 当前目录下的所有文件压缩成zip格式的文件(file.zip)

    [root@ok Desktop]# zip -r image.zip ./*.jpg adding: 20161007_113743.jpg (deflated 0%) adding: 201610 ...

  7. python学习:备份文档并压缩为zip格式

    import os import time source = ['/root/notes'] target_dir = '/root/backup' if not os.path.exists(tar ...

  8. vue-webpack项目自动打包压缩成zip文件批处理

    为什么需要这个? 使用vue框架开发项目,npm run build这个命令会一直用到,如果需要给后端发包,那你还要打包成zip格式的压缩包,特别是项目提测的时候,一天可能要执行重复好几次,所以才有了 ...

  9. 多个文件下载打包生成zip格式下载

    这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下  //将多个文件打包成压缩文件zip格式下载         protected voi ...

随机推荐

  1. HDU Queuing(递推+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. MySQL 锁的小结

    摘自:https://www.cnblogs.com/protected/p/6526857.html 关于数据库的各种锁的总结: 1.共享锁(又称读锁).排它锁(又称写锁): InnoDB引擎的锁机 ...

  3. Ecplise-SVN插件异常: 由于目标计算机积极拒绝,无法连接。

    在Ecplise中,选择team->share project时,出现以下异常 由于目标计算机积极拒绝,无法连接. svn: Unable to connect to a repository ...

  4. 含源码解析,深入Java 线程池原理

    从池化技术到底层实现,一篇文章带你贯通线程池技术. 1.池化技术简介 在系统开发过程中,我们经常会用到池化技术来减少系统消耗,提升系统性能. 在编程领域,比较典型的池化技术有: 线程池.连接池.内存池 ...

  5. React使用antd按需引入报错

    引言 按照antd官网配置按需引入,还是出现一系列的报错: 原因 在网上搜了一下,大部分说是react-scripts以及react-app-rewired版本不兼容的问题,我果断把下载低版本 npm ...

  6. SSH(三)

    在Spring中引用属性文件:    优点:        1.防止随意更改jdbc的连接        2.给不懂代码的人使用    步骤:        1.数据库连接信息写在属性文件中      ...

  7. 行人重识别和车辆重识别(ReID)中的评测指标——mAP和Rank-k

    1.mAP mAP的全称是mean Average Precision,意为平均精度均值(如果按照原来的顺利翻译就是平均均值精度).这个指标是多目标检测和多标签图像分类中长常用的评测指标,因为这类任务 ...

  8. Face-anti-spoofing实验记录(通过val_public_list.txt制作val数据集)

    https://sites.google.com/qq.com/chalearnfacespoofingattackdete/contest-details 数据集官方获取网站 网友总结 https: ...

  9. error C2338: No Q_OBJECT in the class with the signal (NodeCreator.cpp)

    在Qt中,当派生类需要用到信号与槽机制时,有两个要求. 1.该类派生自QObject类. 2.类中有Q_OBJECT宏. 本次报错的原因就是因为没有在类中添加Q_OBJECT宏. 而我的出错原因更傻逼 ...

  10. Mac-Mysql忘记root密码

    cd /usr/local/mysql/bin 切换到root权限 ,需要输入密码: sudo su 输入之后会看见如下信息: sh-3.2# 使用如下命令以安全模式运行mysql ./mysqld_ ...