当前位置: 首页 > 面试题库 >

如何使用PHP压缩整个文件夹

穆宾白
2023-03-14
问题内容

我在stackoveflow上找到了一些关于如何压缩特定文件的代码,但是特定文件夹又如何呢?

Folder/
  index.html
  picture.jpg
  important.txt

在中My Folder,有文件。压缩后My Folder,我还想删除文件夹的全部内容,除了important.txt

我需要你的帮助。谢谢。


问题答案:

代码已于2015/04/22更新。

压缩整个文件夹:

// Get real path for our folder
$rootPath = realpath('folder-to-zip');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        // Add current file to archive
        $zip->addFile($filePath, $relativePath);
    }
}

// Zip archive will be created only after closing object
$zip->close();

压缩整个文件夹+删除除“ important.txt”以外的所有文件:

// Get real path for our folder
$rootPath = realpath('folder-to-zip');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Initialize empty "delete list"
$filesToDelete = array();

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        // Add current file to archive
        $zip->addFile($filePath, $relativePath);

        // Add current file to "delete list"
        // delete it later cause ZipArchive create archive only after calling close function and ZipArchive lock files until archive created)
        if ($file->getFilename() != 'important.txt')
        {
            $filesToDelete[] = $filePath;
        }
    }
}

// Zip archive will be created only after closing object
$zip->close();

// Delete all files from "delete list"
foreach ($filesToDelete as $file)
{
    unlink($file);
}


 类似资料:
  • 问题内容: 如何更改压缩文件的以下命令? 该命令可以正常使用正常文件。我需要更改压缩文件的命令。 问题答案: 您需要像这样读取它们的压缩文件: 尝试这个:

  • 问题内容: 我想解压缩文件,这可以正常工作 但是我需要通过URL传递文件名,而无法使其正常工作,这就是我所拥有的。 我想念什么?我知道这一定是我忽略的小而愚蠢的事情。 谢谢, 问题答案: 我只能假设您的代码来自在线某个地方的教程?在这种情况下,请尝试自己解决这个问题。另一方面,该代码实际上可以在线发布为解压缩文件的正确方法,这有点令人恐惧。 PHP具有用于处理压缩文件的内置扩展。不需要为此使用调用

  • 问题内容: 我正在写一个分析页面,该页面将帮助我找出应用程序中的错误。从本质上讲,它允许直观地比较实际数据和日志条目,并对数据进行一些分析。 由于这仅用于调试,并且由于我将其部署在实时站点中,因此我希望它具有尽可能小的服务器负载。一些分析选项将包括相当繁重的子字符串搜索或n 2个操作,因此我将其分流给客户端。 这意味着PHP页面将仅从表和日志中获取数据,对其中的一些进行JSON并将其写出。然后,客

  • 问题内容: 如果文件是A ,我可以解压缩文件,如果文件类型是I,则可以解压缩文件。我如何使用python 2.7进行此工作? 问题答案: 试试这个包:

  • 问题内容: 我已经找到了许多有关如何从.zip中提取 所有 文件的示例,但是我不知道如何在不迭代.zip文件中的所有文件的情况下提取单个文件。 Go中是否可以从.zip存档中提取单个文件,而无需遍历.zip文件中的所有文件? 例如,如果一个zip文件包含: 我将只提取 吗? 问题答案: 为您提供的归档文件的内容,这些文件作为 片 (的)。没有通过名称获取文件的帮助程序方法,您必须使用循环来遍历文件

  • 问题内容: 假设我具有以下目录结构。 一月份内部有两个excel文件,分别是A.xls和B.xls。在很多地方,都有关于如何使用zip文件进行压缩的文章。但是,我要压缩的文件夹一月自身内部报告文件夹,这样既 月份 和 january.zip 将出席内部报告。( 这意味着当我解压缩january.zip文件时,我应该得到january文件夹 )。 谁能给我提供使用进行此操作的代码。请让我知道通过使用