我使用下面的代码通过从字符串生成 pdf 文件来使用 ZipArchive 下载 zip。生成随机密码,用于打开它。
$zip = new ZipArchive();
$file = sprintf('%s/%s', sys_get_temp_dir(), $zipFile);
if ($zip->open($file, ZipArchive::CREATE) === TRUE) {
$zip->addFromString($pdfFile, $stringPdf); //add file
$zip->setEncryptionName($pdfFile, ZipArchive::EM_AES_256, $pwd);
$zip->close();
header('Content-Description: File Download');
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . $zipFile . '"');
header("Pragma: no-cache");
header("Expires: 0");
header('Content-Length: \' . filesize($file).\'');
ob_end_clean();
flush();
if (readfile($file) !== false) {
unlink($file);
}
}
问题是带有 PDF 的 Zip 已正确下载,并且浏览器中也没有生成错误。仍然不确定为什么无法提取下载的 zip。不知道如何调试它或可能是一个问题。如果有人可以提供建议,那就太好了。
下面的模块信息在 QA 和 Staging 环境中是相同的,但下载 zip 仍然适用于两者,但提取只是在 Staging 上不起作用。它只是不验证密码。什么可能导致此环境问题(如果有)?
zip
Zip => enabled
Zip version => 1.19.2
Libzip headers version => 1.7.3
Libzip library version => 1.8.0
BZIP2 compression => Yes
XZ compression => Yes
ZSTD compression => No
AES-128 encryption => Yes
--
ZLib Support => enabled
Stream Wrapper => compress.zlib://
Stream Filter => zlib.inflate, zlib.deflate
Compiled Version => 1.2.7
Linked Version => 1.2.7
Directive => Local Value => Master Value
zlib.output_compression => Off => Off
zlib.output_compression_level => -1 => -1