如何使用php将文件添加到ziparchive中新创建的文件夹?

如何使用php将文件添加到ziparchive中新创建的文件夹?,php,zip,Php,Zip,如上图所示,我的图像组织在虚拟文件夹中(在mysql数据库中,但不是真正的文件夹中)。我需要将所选文件夹作为zip下载。我可以压缩图像,但如何添加子目录以向其中添加图像(我尝试使用addEmptyDir()但无法找到向其中添加图像的方法!)。 在不创建物理文件夹的情况下,这真的可行吗 请建议 如果要添加到zip目录的“文件”作为字符串存储在数据库中,则可以使用。如果db存储指向实际文件的指针,请使用如果要添加到zip目录的“文件”作为字符串存储在db中,则可以使用。如果db存储指向实际文件的指针

如上图所示,我的图像组织在虚拟文件夹中(在mysql数据库中,但不是真正的文件夹中)。我需要将所选文件夹作为zip下载。我可以压缩图像,但如何添加子目录以向其中添加图像(我尝试使用
addEmptyDir()
但无法找到向其中添加图像的方法!)。 在不创建物理文件夹的情况下,这真的可行吗


请建议

如果要添加到zip目录的“文件”作为字符串存储在数据库中,则可以使用。如果db存储指向实际文件的指针,请使用

如果要添加到zip目录的“文件”作为字符串存储在db中,则可以使用。如果db存储指向实际文件的指针,请使用

谢谢@dnagirl的回答,但我实际上是在寻找一种在子文件夹中添加文件的方法(可能我说不清楚!)

发现zipArchive会自动创建文件夹,如果我们给它“
path/to/filename
”而不是“
filename

这就是我实现它的方式,以防任何人需要它

function zipFilesAndDownload($file_names,$archive_file_name,$img_localpath)
{
  $folder_path=WSP_AK_PLUGIN_DIR ."akTempFolder/";
  $zip = new ZipArchive();
  if ($zip->open($folder_path.$archive_file_name, ZIPARCHIVE::CREATE )===TRUE) {
    //$zip->addEmptyDir('myimages');(this was what i thought would create folder!)
    foreach($file_names as $files)
    {
        //$zip->addFile($img_localpath.'/'.$files, 'myfolder/'.$files);
        $zip->addFile($img_localpath.'/'.$files['fileName'],    $files['folder_path'].$files['fileName']);
    }
    $zip->close();
在上面的代码中,
$files['folder_path']
将给出为eg
folder1/folder2/image1.jpg创建文件的路径

    header("Content-type: application/zip"); 
    header("Content-Disposition: attachment; filename=$archive_file_name");
    header('Content-Type: application/force-download');
    header('Content-Length: ' . filesize($folder_path.$archive_file_name));
    header("Pragma: no-cache"); 
    header("Expires: 0");
    if( file_exists($folder_path.$archive_file_name)) {
        ob_clean();
        readfile($folder_path.$archive_file_name);
    }
    unlink($folder_path.$archive_file_name);
  }
}

谢谢@dnagirl的回答,但我实际上是在寻找一种在子文件夹中添加文件的方法(也许我没说清楚!)

发现zipArchive会自动创建文件夹,如果我们给它“
path/to/filename
”而不是“
filename

这就是我实现它的方式,以防任何人需要它

function zipFilesAndDownload($file_names,$archive_file_name,$img_localpath)
{
  $folder_path=WSP_AK_PLUGIN_DIR ."akTempFolder/";
  $zip = new ZipArchive();
  if ($zip->open($folder_path.$archive_file_name, ZIPARCHIVE::CREATE )===TRUE) {
    //$zip->addEmptyDir('myimages');(this was what i thought would create folder!)
    foreach($file_names as $files)
    {
        //$zip->addFile($img_localpath.'/'.$files, 'myfolder/'.$files);
        $zip->addFile($img_localpath.'/'.$files['fileName'],    $files['folder_path'].$files['fileName']);
    }
    $zip->close();
在上面的代码中,
$files['folder_path']
将给出为eg
folder1/folder2/image1.jpg创建文件的路径

    header("Content-type: application/zip"); 
    header("Content-Disposition: attachment; filename=$archive_file_name");
    header('Content-Type: application/force-download');
    header('Content-Length: ' . filesize($folder_path.$archive_file_name));
    header("Pragma: no-cache"); 
    header("Expires: 0");
    if( file_exists($folder_path.$archive_file_name)) {
        ob_clean();
        readfile($folder_path.$archive_file_name);
    }
    unlink($folder_path.$archive_file_name);
  }
}

否,目录内容为images@DipeshKc:图像是文件或二进制字符串。所以我提到的两个函数中的一个应该适合您images@DipeshKc:图像是文件或二进制字符串。因此,我提到的两个函数中的一个应该适用于您。非常感谢-我错过了ob_clean()并想知道为什么我一直收到“意外的归档结束”错误。非常感谢-我错过了ob_clean()并想知道为什么我一直收到“意外的归档结束”错误。