1

在使用 zipArchive 压缩它们之前,我需要解析一系列 php 文件以输出 .PDF 和 .PNG 文件。我想做的是

$zip = new ZipArchive();
$zip->open($file, ZipArchive::OVERWRITE);

//If you access qr_gen.php on a browser it creates a QR PNG file.
$zip->addFile('qr_gen.php?criteria=1', 'alpha.png');
$zip->addFile('qr_gen.php?criteria=2', 'beta.png');
//If you access pdf_gen.php on a browser it creates a PDF file.
$zip->addFile('pdf_gen.php?criteria=A', 'instructions.pdf');

$zip->close();
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.zip"');
readfile($file);
unlink($file);

这显然是行不通的。我怎样才能实现我的目标?

4

3 回答 3

5

当您提供和 url 作为文件名时,以下行将不起作用:

$zip->addFile('qr_gen.php?criteria=1', 'alpha.png');

相反,您必须先下载 png 并将它们存储在本地。然后将它们添加到 zip 存档中。像这样:

file_put_contents('alpha.png', 
    file_get_contents('http://yourserver.com/qr_gen.php?criteria=1');

$zip->addFile('alpha.png');

您可以在文档页面找到更多信息ZipArchive::addFile()

于 2013-04-04T13:24:20.373 回答
1

您需要做的是首先在本地获取文件。如果您设置了 URL fopen 映射器,则可以(很容易地)使用 file_get_contents 来实现这一点,或者如果失败,则使用 cURL 调用。

这是一个示例方法:

$zip = new ZipArchive();
$zip->open("zipfile.zip",ZipArchive::OVERWRITE);
$URLs = array(
   "alpha.png" => "http://my.url/qr_gen.php?criteria=1",
   "beta.png" => "http://my.url/qr_gen.php?criteria=2",
   "instructions.pdf" => "http://my.url/pdf_gen.php?criteria=A");
foreach ($URLs as $file => $URL) {
  $f = @file_get_contents($URL);
  if (empty($f)) throw new Exception("File not found: ".$URL);
  $zip->addFromString($file, $f);
}

然后,您的 zip 将以 $zip 的形式提供,以供进一步处理。

于 2013-04-04T13:28:58.307 回答
0

首先,在浏览器中执行所有文件并将该内容(png.pdf)放入一个文件夹中,然后通过一个一个获取来创建它的 zip。

希望能帮助到你

于 2013-04-04T13:27:33.227 回答