我正在尝试制作一个表单,用户可以选择他们想要的PDF手册,并将其压缩为文件名“Brochures.zip”供他们下载。
我遇到问题要解决这个问题。任何人都可以突出显示哪里出错了?谢谢!
表格:
<label><input type="checkbox" name="brochure[]" value="file1">file1</label>
<label><input type="checkbox" name="brochure[]" value="file2">file2</label>
<label><input type="checkbox" name="brochure[]" value="file3">file3</label>
<label><input type="checkbox" name="brochure[]" value="file4">file4</label>
的download.php
$brochure = $_POST['brochure'] ;
$send = true;
if($send) {
$zip = new ZipArchive();
$res = $zip->open('download.zip', ZipArchive::CREATE);
if ($res === TRUE) {
foreach ($brochure as $file => $val) {
$filename = '../pdf/' . $val . '.pdf';
$zip->addFile($filename);
}
$zip->close();
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="download.zip"');
readfile('download.zip');
}else {
echo 'failed';
}
答案 0 :(得分:0)
如果文件未添加到存档中,您可以添加一个简单的检查:
if (!file_exists($filename)) { die("Cannot find $filename"); }
您还可以启动错误报告:
error_reporting(-1);
ini_set('display_errors', 'On');
然后在exit;
之后$zip->close();
。如果出现任何问题,$zip->addFile()
应该返回false
,所以希望它也会显示一些警告/错误。
您也可以尝试使用addFromString()
file_get_contents()
来查看是否有帮助。我的猜测是,..
中的{{1}}的相对路径会抛弃Zip扩展名。
答案 1 :(得分:0)
这是目录结构..
- file1.pdf
- file2.pdf
- file3.pdf
拉链
- create.php
- download.php
以下是与您相同的代码......
create.php
<form action="download.php" method="post">
<label><input type="checkbox" name="brochure[]" value="file1">file1</label>
<label><input type="checkbox" name="brochure[]" value="file2">file2</label>
<label><input type="checkbox" name="brochure[]" value="file3">file3</label>
<label><input type="checkbox" name="brochure[]" value="file4">file4</label>
<input type="submit">
</form>
download.php与上面的代码相同。确保您具有正确的目录结构。正如我所说的,我尝试了你的代码,并按预期工作,用file1.pdf,file2.pdf等选定文件创建download.zip文件......
答案 2 :(得分:0)
我设法通过使用脚本here来解决问题。此外,我意识到我需要将文件夹设置为757才能生成zip文件。