0

我使用下面的代码通过从字符串生成 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
4

0 回答 0