📜  php ziparchive 压缩文件夹 - PHP (1)

📅  最后修改于: 2023-12-03 15:03:36.026000             🧑  作者: Mango

PHP ZipArchive压缩文件夹

在PHP中,我们可以使用ZipArchive扩展类来轻松地压缩文件夹。ZipArchive类提供了一种简单而强大的方法来创建和管理ZIP格式的归档文件。

安装ZipArchive扩展

在使用ZipArchive类之前,必须确保ZipArchive扩展已安装并启用在您的PHP服务器上。可以通过运行以下命令来检查ZipArchive扩展是否已启用:

php -m | grep zip

如果看到Zip,则表示已启用ZipArchive扩展。如果未看到Zip,则需要安装该扩展。您可以使用以下命令安装ZipArchive扩展:

sudo apt-get install php-zip
压缩文件夹

以下是使用ZipArchive类压缩文件夹的示例代码:

<?php
$zip = new ZipArchive();
$filename = "example.zip";

if ($zip->open($filename, ZipArchive::CREATE) !== TRUE) {
    exit("无法打开 <$filename>\n");
}

$dir = "path/to/folder"; //将要被压缩的文件夹路径

if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            // 跳过父目录和当前目录
            if ($file == "." || $file == "..") {
                continue;
            }

            //将文件添加到归档文件中
            if (!$zip->addFile($dir . "/" . $file)) {
                exit("无法将文件添加到归档文件中: " . $file . "\n");
            }
        }
        closedir($dh);
    }

    //完成并关闭归档文件
    $zip->close();
    echo "归档文件已创建成功!\n";
} else {
    exit($dir . " 不是一个文件夹!\n");
}
?>
代码解析

首先,创建一个ZipArchive实例,并指定要创建的归档文件名。

$zip = new ZipArchive();
$filename = "example.zip";

接下来,使用open方法打开归档文件。

if ($zip->open($filename, ZipArchive::CREATE) !== TRUE) {
    exit("无法打开 <$filename>\n");
}

在处理要压缩的文件夹之前,需要确保该文件夹实际存在并且是一个文件夹,而不是文件。

$dir = "path/to/folder";

if (is_dir($dir)) { //检查是否是文件夹
    // Do something...
} else {
    exit($dir . " 不是一个文件夹!\n");
}

如果要压缩的文件夹存在且是文件夹,则需要遍历该文件夹中的所有文件,并将每个文件添加到归档文件中。

if ($dh = opendir($dir)) { //打开文件夹
    while (($file = readdir($dh)) !== false) {
        // 跳过父目录和当前目录
        if ($file == "." || $file == "..") {
            continue;
        }

        //将文件添加到归档文件中
        if (!$zip->addFile($dir . "/" . $file)) {
            exit("无法将文件添加到归档文件中: " . $file . "\n");
        }
    }
    closedir($dh);
}

最后,完成和关闭ZipArchive对象,这会将归档文件从内存写入磁盘。

$zip->close();
echo "归档文件已创建成功!\n";
结论

使用PHP的ZipArchive类可以轻松地创建和管理ZIP格式的归档文件。只需遍历要压缩的文件夹中的所有文件,并将它们添加到ZipArchive对象中即可。在完成添加所有文件后,将ZipArchive对象写入磁盘即可完成压缩。