1

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

下载.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';
    }
4

3 回答 3

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(),看看是否有帮助。我的猜测是其中的相对路径..会抛出 Zip 扩展。

于 2012-06-20T08:49:28.620 回答
0

我设法通过使用这里的脚本来解决问题。另外,我意识到我需要将文件夹设置为 757 才能生成 zip 文件。

于 2012-06-21T01:46:25.773 回答
0

这是目录结构..

  • PDF格式

    -- 文件1.pdf

    -- 文件2.pdf

    -- 文件3.pdf

  • 压缩

    -- 创建.php

    -- 下载.php

以下是与您相同的代码...

创建.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 文件......

于 2012-06-20T10:10:43.120 回答