利用php的ZipArchive可以对文件进行打包,我这里包装了一个函数,传入数组,即可打包,数组的定义方式为:对于数组的每一个元素,当元素为数组时,键名为目录,否则就是将所有的字符串当做相对路径,将文件添加到压缩包的当前路径下,代码贴出来,附件中有可运行版本。
这里要再提一下的是,如果传入比如$list = array('file1' => './1.txt', 'file2' => './2.txt');这里的file1,file2作为键名毫无意义,并不会为之创建目录,因为值是一个字符串,所以压缩包的根目录里包含了1.txt, 2.txt,如果要将1.txt放入file1目录,2.txt放入file2目录,那么应该写参数为:
$list = array('list1' => array('./1.txt', './2.txt')),之所以这样方式实现,是因为考虑问题简单多了,只要值是数组,就创建目录,只要值不是数字,就必须是字符串,那么就直接添加文件到压缩包的当前路径下。当前路径则随着目录的创建逐层递归。
<?php $wwwDIR = $_SERVER['DOCUMENT_ROOT']; $datalist = array( 'testzip' => array( "./1.txt", 'tmp' => array( "./2.txt", "./3.txt", ), ), ); $filename = zipArrayFiles($datalist, $wwwDIR); if ($filename) { header("Cache-Control: public"); header("Content-Description: File Transfer"); header('Content-disposition: attachment; filename=' . basename($filename)); //文件名 header("Content-Type: application/zip"); //zip格式的 header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件 header('Content-Length: ' . filesize($filename)); //告诉浏览器,文件大小 @readfile($filename); } function zipArrayFiles($datalist, $outDir) { function _zipArrayFiles($datalist, $zip, $basePath = '') { foreach ($datalist as $dirname => $path) { if (!is_array($path)) { $zipPathName = $basePath ? $basePath . '/' . basename($path) : basename($path); $result = $zip->addFile($path, $zipPathName); if (false === $result) { return false; } } else { $zipDirName = $basePath ? $basePath . '/' . $dirname : $dirname; $result = $zip->addEmptyDir($zipDirName); if (false === $result) { return false; } $result = _zipArrayFiles($path, $zip, $zipDirName); if (false === $result) { return false; } } } return true; } $md5sum = md5(serialize($datalist)); $filename = $outDir . '/' . $md5sum . '.zip'; if (file_exists($filename)) { return $filename; } $zip = new ZipArchive; if ($zip->open($filename, ZIPARCHIVE::CREATE) !== TRUE) { return false; } $result = _zipArrayFiles($datalist, $zip); if (false === $result) { $zip->unchangeAll(); return false; } $zip->close(); return $filename; }
相关推荐
VB6.0调用 DLL版ZIP压缩文件夹目录和解压ZIP文件,网上很多源码不好用,所以就自己做了一个。原始代码是VC++的用VS2019编译了一个,DLL封装了下。调用很简单 '调用方法如下: 'CreateZipFileA "C:\123", "C:\123.zip...
本程序能把站点中的 ZIP 压缩文件解压到指定目录。 转载请注明:本程序由 纯粹空间(http://www.softpure.com) 提供,作者:faisun(faisun@sina.com). 使用方法:把zip文件通过FTP上传到本文件相同的目录下,选择zip...
本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 二、课程设计的要求与数据 1. 在...
C++利用Zlib库实现zip文件压缩及解压 支持递归压缩.可配合自动更新功能实现zip压缩包进得软件更新
iTextSharp实现PDF的合并与分卷 参见:https://download.csdn.net/download/xjzdr/85519979 C#用Ionic.Zip实现文件、目录的压缩及分卷
PHP生成压缩文,不带要压缩文件的根目录,去掉根目录,有时可能需要这样
java压缩文件成zip实现无乱码 内置类与jar包
* 如果传null或者""则将压缩文件存放在当前目录,即跟源文件同目录,压缩文件名取源文件名,以.zip为后缀; * 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为...
包含了使用的jar包,以及一个Java类,实现了使用Java对多目录多层级的文件进行打包,以及对ZIP包进行解压缩的操作。
23.java自定义异常.zip23.java自定义异常.zip23.java自定义异常.zip23.java自定义异常.zip23.java自定义异常.zip23.java自定义异常.zip23.java自定义异常.zip23.java自定义异常.zip23.java自定义异常.zip23.java...
通过java封装的ZipEntry和ZipOutputStream 来实现对文件夹及文件的压缩功能,自定义封装使用MyZip
创建多级目录
解压缩zip文件所需要的控件,可以完美将zip文件解压出来
yapi支持多级目录包,下载之前先安装mongodb,然后修改config配置,再进入vendors 输入 npm run install-serve 初始化数据,最后运行node server/app.js 启动即可 详情参考: https://github.com/zybieku/yapi
实现将文件压缩为zip文件和解压缩zip文件
使用java的zip压缩库 对文件和文件夹实现压缩
本例是把多个文件压缩成一个zip文件,然后下载到本地。 项目完整,下载解压即可运行。
黑色@代码大婶之前发的zip操作模块没有压缩目录的命令,自己写了个,可以把目录下以及子目录、子目录的文件打包,目录大的话可以自己加个回调看进度,模块源码的话自己论坛搜索,没做任何修改。 @w589321。
直接可以用的项目。数据量大,导出多个excel然后压缩成zip文件。。。