由PHP文件生成的Zip文件

时间:2013-04-04 13:18:37

标签: php zip ziparchive

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

$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);

这显然不起作用。我怎样才能实现目标?

3 个答案:

答案 0 :(得分: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()

的文档页面找到更多信息

答案 1 :(得分:1)

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

这是一种示例性方法:

$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格式提供,以便进一步处理。

答案 2 :(得分:0)

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

希望有所帮助