我需要解析一系列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);
这显然不起作用。我怎样才能实现目标?
答案 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');
的文档页面找到更多信息
答案 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文件。
希望有所帮助