Php Zip存档复选框数组

时间:2012-06-20 08:32:18

标签: php

我正在尝试制作一个表单,用户可以选择他们想要的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';
    }

3 个答案:

答案 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)

这是目录结构..

  • PDF

    - 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文件。