如何在不使用 php 压缩的情况下下载文件夹及其所有文件夹和文件

Posted

技术标签:

【中文标题】如何在不使用 php 压缩的情况下下载文件夹及其所有文件夹和文件【英文标题】:How to download a folder with all its folders and files without zipping it with php 【发布时间】:2021-04-28 18:18:55 【问题描述】:

1 - 我有一个文件夹,里面有很多用户文件夹,每个用户的文件夹里面都有其他文件夹,里面有这样的图像:

localhost/cm/app/model/uploads/mark/3/small/car.jpg localhost/cm/app/model/uploads/mark/3/big/car.jpg localhost/cm/app/model/uploads/stiven/9/small/pc.jpg localhost/cm/app/model/uploads/stiven/9/big/pc.jpg

2 - 我希望我下载这个文件夹及其所有内容。

3 - 如果无法使用任何名称压缩它,我更喜欢不使用相同名称压缩它来下载它。

4 - 我使用了此代码,但它不起作用,因为当我在下载后尝试打开 zip 文件夹时出现错误消息并告诉我“存档格式未知或已损坏”,这是我的代码:

<?php
$dir = 'http://localhost/cm/app/model/uploads'; //folder path

$archive = time().'download.zip';

$zip = new ZipArchive;
$zip->open($archive, ZipArchive::CREATE);
$files = scandir($dir);
unset($files[0], $files[1]);
foreach ($files as $file) 
$zip->addFile($dir.'/'.$file);

$zip->close();

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$archive);
header('Content-Length: '.filesize($archive));
readfile($archive);
unlink($archive);
?>

*那么如何在不压缩的情况下下载我的文件夹及其所有文件夹和图像?如果不可能,如何使用压缩?

【问题讨论】:

【参考方案1】:

我怀疑你的代码有错误。可能没有安装 ext-zip 一种检查方法是在终端中运行php -m,它将显示所有安装和启用的模块。

如果您使用文本编辑器打开 zip 文件,就会出现错误消息而不是存档数据。

【讨论】:

【参考方案2】:

这是我发现的最好方法:

 <?php
 // Get real path for our folder
 $rootPath = realpath('folder_for_ziping');

 // 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();
$archive = "file.zip";
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$archive);
header('Content-Length: '.filesize($archive));
readfile($archive);
unlink($archive);
?>

【讨论】:

以上是关于如何在不使用 php 压缩的情况下下载文件夹及其所有文件夹和文件的主要内容,如果未能解决你的问题,请参考以下文章

无论如何要在不下载的情况下解压缩谷歌驱动器中的 zip 或 tar

如何在不修改脚本的情况下计算 PHP 脚本的文件读取和写入?

如何在不使用 3rd-party API 的情况下用 C# 压缩文件?

如何在不使用 map reduce 的情况下使用 lzo 压缩写入 hadoop hdfs

如何在不重新压缩 JPEG 的情况下删除 EXIF 数据?

如何在不提取Java的情况下读取压缩文件的内容