Php 压缩文件夹并下载时出错

Php 压缩文件夹并下载时出错,php,Php,所以我有下面的代码,应该压缩一个文件夹并下载它,它确实可以工作,但是当其中有另一个文件夹时,它会下载一个损坏的zip文件。我做错了什么 此外,这段代码还在我的本地主机上创建zip文件,如何避免这种情况 $getID = $_GET['id']; $path = getFolderPath($getID); $zip = new ZipArchive; $zipName = time().".zip"; $zip->open($zipName, ZIPARCHIVE::CREATE); if

所以我有下面的代码,应该压缩一个文件夹并下载它,它确实可以工作,但是当其中有另一个文件夹时,它会下载一个损坏的zip文件。我做错了什么

此外,这段代码还在我的本地主机上创建zip文件,如何避免这种情况

$getID = $_GET['id'];
$path = getFolderPath($getID);
$zip = new ZipArchive;
$zipName = time().".zip";
$zip->open($zipName, ZIPARCHIVE::CREATE);
if (false !== ($dir = opendir($path))){
    while (false !== ($file = readdir($dir))){
        if ($file != '.' && $file != '..'){
            $zip->addFile($path.DIRECTORY_SEPARATOR.$file, $file);
        }
    }
}
$zip->close();
ob_get_clean();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename='.$zipName);
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($zipName));
readfile($zipName);

您可能需要递归地在其中添加子目录和文件。请看,注释中有一些示例。因此,基本上它看起来像嵌套循环,并对每个文件夹运行相同的过程,对吗?是的,对。恐怕addFile()方法不能添加子目录,只能添加常规文件。我还没有在手册中找到这一点,但是php.net上的评论建议是这样的。我已经完成了2个工作!谢谢:现在我有一个小问题要解决。。创建并下载zip文件时,它将在“我的脚本”文件夹中保存一份副本。想象一下,如果有很多用户下载一个zip文件,并且每个zip都存储在服务器上。。有没有办法禁用此功能?或者我每次都要取消链接?是的,你必须取消链接。我建议使用“tempnam()”函数来创建唯一的文件名,而不是像您那样使用时间戳。如果两个用户同时单击ZIP文件,其中一个用户可能会收到ZipArchive::ER_EXISTS error或其他一些不好的事情。另一件事——如果zip存档只在很长一段时间内改变,考虑一下生成文件一次,而不是每次用户点击。