如何使用PHP从mysql下载多个压缩文档(word、ppt、pdf)?
在我的数据库中,我用逗号将所有上传的文档文件存储在一列中。我想下载压缩后的所有文件。例如,对于Id=1,获得了2个上载文件(a.pdf,b.pdf)。当我下载为zip时,输出只有1个文件,而不是假设有2个文件如何使用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
//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' />
<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;
}