如何使用PHP从mysql下载多个压缩文档(word、ppt、pdf)?

如何使用PHP从mysql下载多个压缩文档(word、ppt、pdf)?,php,mysql,Php,Mysql,在我的数据库中,我用逗号将所有上传的文档文件存储在一列中。我想下载压缩后的所有文件。例如,对于Id=1,获得了2个上载文件(a.pdf,b.pdf)。当我下载为zip时,输出只有1个文件,而不是假设有2个文件 //code $sql = "SELECT * FROM submission INNER JOIN studentsubmission ON studentsubmission.SubmissionID = submission.SubmissionID

在我的数据库中,我用逗号将所有上传的文档文件存储在一列中。我想下载压缩后的所有文件。例如,对于Id=1,获得了2个上载文件(a.pdf,b.pdf)。当我下载为zip时,输出只有1个文件,而不是假设有2个文件

//code
$sql = "SELECT * FROM submission 
    INNER JOIN studentsubmission ON studentsubmission.SubmissionID = submission.SubmissionID    
    WHERE submission.FacultyID= '$facultyId' AND studentsubmission.StudentSubmissionStatus='1'";

$result = $conn->query($sql); 
    if($result->rowCount() > 0){       
        while($row = $result->fetch()){          
       
            $row['Document_url'] = trim($row['Document_url'],'\,');
            $temp = explode(',',$row['Document_url'] );                         
            $s = array_filter($temp);
            foreach($s as $key => $ew){     
                   
                $submissionlink1 = 'document/'.$ew.'';               
              
             }
           
       

    };
    array_push($files,$submissionlink1);

    
}


$zip = new ZipArchive();
$zip_name = time().".zip"; // Zip name
$zip->open($zip_name,  ZipArchive::CREATE);

foreach($files as $a => $b){ 
    if(file_exists($b)){
        $zip->addFromString(basename($b),  file_get_contents($b));  
        }else{
        echo"File does not exist $d";
        }
 }

$zip->close();

  
注意:我没有测试它!)

1。HTML

创建一个包含两个按钮元素的应用程序,一个用于创建Zip,另一个用于下载

完成的代码:

<div class='container'>
 <h1>Create and Download Zip file using PHP</h1>
 <form method='post' action=''>
   <input type='submit' name='create' value='Create Zip' />&nbsp;
   <input type='submit' name='download' value='Download' />
 </form>
</div>
<?php 
// Create ZIP file
if(isset($_POST['create'])){
  $zip = new ZipArchive();
  $filename = "./myzipfile.zip";

  if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
    exit("cannot open <$filename>\n");
  }

  $dir = 'includes/';

  // Create zip
  createZip($zip,$dir);

  $zip->close();
}

// Create zip
function createZip($zip,$dir){
  if (is_dir($dir)){

    if ($dh = opendir($dir)){
       while (($file = readdir($dh)) !== false){
 
         // If file
         if (is_file($dir.$file)) {
            if($file != '' && $file != '.' && $file != '..'){
 
               $zip->addFile($dir.$file);
            }
         }else{
            // If directory
            if(is_dir($dir.$file) ){

              if($file != '' && $file != '.' && $file != '..'){

                // Add empty directory
                $zip->addEmptyDir($dir.$file);

                $folder = $dir.$file.'/';
 
                // Read data of the folder
                createZip($zip,$folder);
              }
            }
 
         }
 
       }
       closedir($dh);
     }
  }
}

// Download Created Zip file
if(isset($_POST['download'])){
 
  $filename = "myzipfile.zip";

  if (file_exists($filename)) {
     header('Content-Type: application/zip');
     header('Content-Disposition: attachment; filename="'.basename($filename).'"');
     header('Content-Length: ' . filesize($filename));

     flush();
     readfile($filename);
     // delete file
     unlink($filename);
 
   }
}
?>
4。结论 上面定义的函数createZip()接受目录路径作为参数。它将从路径中读取所有文件和文件夹,并将它们添加到zip文件中


您还可以使用ZipArchive类来解压Zip文件。

您试图调试该问题的原因是什么?可能
file\u exists
对其中一个文件返回false?它只显示一个文档,而不是zip文件中的两个文档。因此我不确定它在哪里出错。。
.container{
   margin: 0 auto;
   width: 50%;
   text-align: center;
}

input[type=submit]{
   border: 0px;
   padding: 7px 15px;
   font-size: 16px;
   background-color: #00a1a1;
   color: white;
   font-weight: bold;
}