PHP密码保护的ZipArchive无法在osx上打开/提示用户输入密码

时间:2019-02-22 12:27:46

标签: php macos zip unzip ziparchive

在php 7.2.0中,我创建了一个受密码保护和每个文件加密的zip文件,如php文档中建议的那样。

此功能运行良好,并且在Windows上将zip下载到客户端后,系统会提示用户输入密码,然后将内容解压缩。

在osx机器上双击文件后,将显示错误消息,当在终端中打开时,将显示更清晰的错误:

'unsupported compression method 99'

甚至不提示输入密码,这与我在这里看到的不断扩展的zip问题无关。 该zip似乎与在另一台Mac机器上创建的受密码保护的zip有所不同。

这与winZip引入但未被他人使用的加密方法EM_AES_256有关。

class PatientReferralZipController extends Controller{

protected $zip;
protected $zipName = 'verwijsbrief';

public function generateZip($text, $doc, $password, $patient){
    $zipPath = config('constants.patient_files_upload_dir')."/".$patient->id;
    $this->createZip($password, $zipPath);
    $this->addTextToZip($text);
    $this->addDocumentToZip($doc);
    $this->zip->close();
    return $this->zip;
}

public function createZip($password, $zipPath){
    if (!file_exists($zipPath)) {
        mkdir($zipPath, 0777, true);
    }
    if($this->zip->open($zipPath."/".$this->zipName.".zip", ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE){
        $this->zip->setPassword($password);
    }
}

public function addTextToZip($text){
    $this->zip->addFromString('verwijsbriefTextvak.txt',$text);
    $this->zip->setEncryptionName('verwijsbriefTextvak.txt', ZipArchive::EM_AES_256);
}

public function addDocumentToZip($doc){
    $ext = $doc->getClientOriginalExtension();
    $filename = $this->zipName.".".$ext;
    $this->zip->addFile($doc->path(),$filename);
    $this->zip->setEncryptionName($filename, ZipArchive::EM_AES_256);
}

public function __construct($text, $doc, $password, $patient){
    $this->zip = new ZipArchive();
    $this->generateZip($text, $doc, $password, $patient);
}}

就像我坚强的一样,这与使用专有加密的WinZip有关。 “ WinZip引入了自己的AES-256加密” -wikipedia

有关解压缩问题的相关文章:superuser

0 个答案:

没有答案