如何使用PHP ZipArchive和下载创建压缩文件

773 阅读3分钟

作者:Vincy。最后修改于2022年9月12日。

在PHP中使用ZipArchive类可以从一个充满文件的文件夹中创建一个压缩包。这个类的实例创建了一个句柄来读取或写入压缩档案的文件。

这个类包括几个属性和方法来压缩文件档案。

在这篇文章中,我们将看到一个例子。

  1. 如何创建一个压缩档案文件。
  2. 如何下载压缩后的压缩文件。

如果你想知道如何在PHP图像压缩中压缩一个以上的图像,请参考这篇文章。

如何创建一个压缩档案文件

该文件解析了输入目录并将其文件压缩成一个压缩文件。它进行了以下步骤来创建目录的压缩文件。

  1. 创建一个PHP ZipArchive类实例。
  2. 用该实例打开一个zip文件存档。它接受输出的zip文件名和打开存档的模式。
  3. 在输入目录中应用一个递归解析。
  4. 如果目录中包括一个文件,那么它就用*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代码下载。

它遵循以下步骤来下载创建的压缩文件。

  1. 获取压缩文件的绝对路径。
  2. 设置标题参数,如。
    • 内容长度。
    • 内容类型。
    • 内容编码,以及更多。

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类所提供的方法列表。

  1. count() - 用于获取压缩档案文件中的文件数量。
  2. extractTo() - 提取档案内容。
  3. renameIndex() - 按索引重命名一个特定的档案条目。
  4. replaceFile() - 通过指定一个新的路径,用一个新的文件替换压缩档案中的一个文件。

本例中使用的ZipArchive方法

下面列出了本例中使用的一些方法。这些都是该类工作中经常使用的方法。

  1. open() - 通过指定.zip文件名来打开一个压缩档案文件。
  2. addFile() - 从输入目录中添加一个文件到压缩档案中。
  3. addEmptyDir() - 将一个空目录添加到存档中,以加载输入目录的子目录文件。
  4. close() - 用句柄的引用关闭活动的ZipArchive。

下载