php - 如何在 PHP 中压缩整个文件夹,甚至是空文件夹?

标签 php zip hide

我正在尝试从我的应用程序(Laravel 5.8)上的文件夹下载 zip,它可以工作,但它们会跳过所有空文件夹,而我需要将它们放在 zip 中。

我已经尝试过 Composer 的 ZipArchive (php) 和 chumper/zipper。

知道我该怎么做吗?

这是一个 Linux 服务器,运行 MySQL 5、PHP 7.2 和 Apache2。

$files = glob($folder_path);
\Zipper::make($folder_path.'/'.$folder_main_name.'.zip')->add($files)->close();

这个库只接受 glob,但是如果你有任何有效的解决方案,我可以轻松放弃它。

最佳答案

// Initialize archive object
$zip = new ZipArchive();
$zip->open($zipFilename, 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)
{
    // Get real and relative path for current file
    $filePath = $file->getRealPath();
    $relativePath = substr($filePath, strlen($rootPath) + 1);

    if (!$file->isDir())
    {
        // Add current file to archive
        $zip->addFile($filePath, $relativePath);
    }else {
        if($relativePath !== false)
            $zip->addEmptyDir($relativePath);
    }
}

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

嗨。我修改了之前的答案,现在我得到了包含空文件夹的 zip 文件。我希望这会有所帮助。

关于php - 如何在 PHP 中压缩整个文件夹,甚至是空文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55927020/

相关文章:

CSS + FireFox : hiding scrollbar on iframe with scrolling=yes

html - 在 Firefox 中隐藏 alt 标签

php - 有人知道如何在 Zend 框架中将 Zend_db 组件与 oci8 一起使用吗?

java - 使用 Commons IO 将目录压缩成一个 zipfile

php - Laravel 关系 - 是否有多个*不必要的*数据库调用?

java - Firefox 无法识别 zip 文件

Rubyzip 与 native 操作系统压缩

javascript - 使用 JQuery 在隐藏的 DIV 上使用 toggle() 的问题

php - 在 foreach 中转换为数组是否被认为是一种不好的做法?

php - 如何从数据库中循环数据,在php中用逗号分隔