在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