作者:Vincy。最后修改于2022年9月12日。
在PHP中使用ZipArchive类可以从一个充满文件的文件夹中创建一个压缩包。这个类的实例创建了一个句柄来读取或写入压缩档案的文件。
这个类包括几个属性和方法来压缩文件档案。
在这篇文章中,我们将看到一个例子。
- 如何创建一个压缩档案文件。
- 如何下载压缩后的压缩文件。
如果你想知道如何在PHP图像压缩中压缩一个以上的图像,请参考这篇文章。
如何创建一个压缩档案文件
该文件解析了输入目录并将其文件压缩成一个压缩文件。它进行了以下步骤来创建目录的压缩文件。
- 创建一个PHP ZipArchive类实例。
- 用该实例打开一个zip文件存档。它接受输出的zip文件名和打开存档的模式。
- 在输入目录中应用一个递归解析。
- 如果目录中包括一个文件,那么它就用*addFile()*添加到压缩档案中。
它处理得到无法读取或存档目录的可能性的用例。一旦压缩文件被创建,它将向浏览器显示一条信息。
创建zip文件.php
open($zipFile, ZipArchive::CREATE) !== TRUE) {
exit("Unable to open file.");
}
$folder = 'example-folder/';
createZip($zipArchive, $folder);
$zipArchive->close();
echo 'Zip file created.';
function createZip($zipArchive, $folder)
{
if (is_dir($folder)) {
if ($f = opendir($folder)) {
while (($file = readdir($f)) !== false) {
if (is_file($folder . $file)) {
if ($file != '' && $file != '.' && $file != '..') {
$zipArchive->addFile($folder . $file);
}
} else {
if (is_dir($folder . $file)) {
if ($file != '' && $file != '.' && $file != '..') {
$zipArchive->addEmptyDir($folder . $file);
$folder = $folder . $file . '/';
createZip($zipArchive, $folder);
}
}
}
}
closedir($f);
} else {
exit("Unable to open directory " . $folder);
}
} else {
exit($folder . " is not a directory.");
}
}
?>
输出
//If succeeded it returns
Zip file created.
//If failed it returns
Unable to open directory example-folder.
[or]
"example-folder is not a director.
如何下载压缩后的zip文件
在最后一步,使用PHP ZipArchive类创建压缩文件。该压缩文件可以通过使用下面的PHP代码下载。
它遵循以下步骤来下载创建的压缩文件。
- 获取压缩文件的绝对路径。
- 设置标题参数,如。
- 内容长度。
- 内容类型。
- 内容编码,以及更多。
download-zip-file.php
这个文件只是有触发函数的链接,以创建一个包含目录压缩档案的zip文件。然后,下载输出压缩档案的动作被调用。
index.php
Create and Download Zip file using PHP
Create Zip File
Download Zip File
PHP ZipArchive类的一些方法
我们可以通过使用PHP ZipArchive类的方法和属性来进行更多的操作。这个PHP类所提供的方法列表。
- count() - 用于获取压缩档案文件中的文件数量。
- extractTo() - 提取档案内容。
- renameIndex() - 按索引重命名一个特定的档案条目。
- replaceFile() - 通过指定一个新的路径,用一个新的文件替换压缩档案中的一个文件。
本例中使用的ZipArchive方法
下面列出了本例中使用的一些方法。这些都是该类工作中经常使用的方法。
- open() - 通过指定.zip文件名来打开一个压缩档案文件。
- addFile() - 从输入目录中添加一个文件到压缩档案中。
- addEmptyDir() - 将一个空目录添加到存档中,以加载输入目录的子目录文件。
- close() - 用句柄的引用关闭活动的ZipArchive。