利用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; }
相关推荐
在PHP中生成ZIP压缩文件是一项常见的任务,尤其是在网站开发中,我们可能需要将多个文件打包成一个可下载的压缩文件,以方便用户批量获取或传输数据。本篇将详细讲解如何利用PHP的ZipArchive类来实现这一功能。 ...
这个类提供了静态方法,如`CreateFromDirectory`用于将整个目录压缩到ZIP文件,`ExtractToDirectory`用于从ZIP文件中提取所有内容到指定目录。 2. **ZipArchive类**: - 如果需要更精细的控制,可以使用`System.IO...
ZIP文件是一种广泛使用的文件归档格式,它可以将多个文件和目录组合成一个单一的可压缩文件,方便存储和传输。在Java中,我们可以使用`java.util.zip`包中的类来读取和解压ZIP文件。 首先,我们需要了解几个关键的...
在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...
ZIP文件可以将多个文件和目录组合到一个单一的档案文件中,并且可以进行压缩以节省存储空间。C++库提供了处理ZIP文件的API,使得开发人员能够轻松地对这些文件进行操作。 描述中提到,只需包含头文件即可进行压缩...
在.NET框架中,C#程序员可以使用不同的库来处理压缩文件,如ZIP格式。本教程主要聚焦于如何使用C#语言解压缩ZIP文件,重点在于介绍`ICSharpCode.SharpZipLib`库的使用方法。`ICSharpCode.SharpZipLib`是一个开源库,...
iTextSharp实现PDF的合并与分卷 参见:https://download.csdn.net/download/xjzdr/85519979 C#用Ionic.Zip实现文件、目录的压缩及分卷
这段代码首先创建了一个`ZipArchive`对象,然后打开一个名为“website_backup.zip”的新ZIP文件。通过`scandir()`遍历指定目录下的所有文件,将每个文件添加到ZIP档案中。最后关闭ZIP文件,完成压缩过程。 在进行...
2. 遍历要压缩的文件或目录,使用`addFile()`或`addFromString()`逐个添加到ZIP对象。 3. 添加完成后,调用`close()`方法保存ZIP文件。 4. 如果是在服务器上操作,可能还需要处理HTTP响应,将压缩后的文件作为下载...
3. **提取文件:** 使用`Extract`函数可以将ZIP中的文件提取到指定的目录。例如`myUnzip.Extract("target_path_in_zip\\source_file.txt", "destination_folder\\source_file.txt");`。 4. **获取ZIP信息:** 可以...
要创建一个ZIP文件,你需要遍历要压缩的文件或目录,然后使用`ZipOutputStream`将每个文件添加到ZIP流中。以下是一个简化的示例: 1. 创建`ZipOutputStream`,并将它关联到你要写入的文件流。 2. 对于每个要压缩的...
2. **压缩文件和目录**:可以将单个文件或整个目录压缩成ZIP格式,方便存储和传输。 3. **进度反馈**:在进行压缩和解压缩操作时,UnzipKit提供了进度回调,允许开发者显示进度条或者更新状态信息,提升用户体验。 4...
【标题】"新建 360压缩 ZIP ...总结来说,“新建 360压缩 ZIP 文件.zip”是一个使用360压缩软件创建的ZIP格式压缩文件,包含了一个名为“甘雨”的子文件或子文件夹,体现了360压缩在文件管理和数据传输方面的便利性。
ZIP是一种常用的文件归档格式,它能够将多个文件或目录打包到一个单一的文件中,以便于存储、传输和分发。ZIP文件通常包含一个或多个压缩或未压缩的数据块,每个块对应原始文件的一个部分。ZIP格式支持多种压缩算法...
- `ZipFile.CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName)`: 这个方法用于将指定目录下的所有文件和子目录压缩成一个ZIP文件。 - `ZipFile.AddFile(string fileName, ...
"多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将深入探讨这个话题,主要涵盖以下几个方面: 1. **大数据量导出**: - 当数据...
2. 处理ZIP文件格式:理解ZIP文件的内部结构,包括中央目录记录、本地文件头和数据区。这些部分分别包含了文件名、压缩方法、压缩时间等信息,以及压缩数据的实际位置。 3. 解析ZIP文件:在UCOS应用中,通过UNZIP库...
在C#编程中,创建多级目录是一项常见的任务,尤其在处理文件系统或者构建项目结构时。`WriteDir_src.zip`这个压缩包包含了用于实现这一功能的源代码资源,包括`WriteDir.cpp`和`WriteDir.h`两个C++源文件,以及一个...
1. **压缩文件与目录**:可以将单个文件或整个目录压缩成 ZIP 文件,支持自定义压缩级别以平衡压缩速度和文件大小。 2. **解压缩 ZIP 文件**:能够读取 ZIP 文件并将其内容解压缩到指定的目录,同时保留原始文件...
Flex Air压缩和读取zip文件是一项在开发过程中经常会遇到的任务,尤其在处理大量数据或文件传输时。这个主题主要涉及到Flex、Adobe AIR以及ZipArchive库的使用。让我们深入了解一下这些概念和技术。 首先,Flex是一...