Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP密码保护的ZipArchive未在OS X上打开或提示用户输入密码_Php_Macos_Zip_Unzip_Ziparchive - Fatal编程技术网

PHP密码保护的ZipArchive未在OS X上打开或提示用户输入密码

PHP密码保护的ZipArchive未在OS X上打开或提示用户输入密码,php,macos,zip,unzip,ziparchive,Php,Macos,Zip,Unzip,Ziparchive,在PHP7.2.0中,我创建了一个受密码保护的zip,并对每个文件进行加密,就像php文档中建议的那样 此功能运行良好,在将zip下载到windows上的客户端后,系统会提示用户填写密码并解压缩内容 在OS X机器上,双击文件后会显示错误消息,在终端中打开时会显示更清晰的错误: unsupported compression method 99 甚至没有提示输入密码,这与我在这里看到的不断扩大的zip问题无关。看起来这个zip与在另一台Mac机器上创建的受密码保护的zip有些不同 这与加密方法

在PHP7.2.0中,我创建了一个受密码保护的zip,并对每个文件进行加密,就像php文档中建议的那样

此功能运行良好,在将zip下载到windows上的客户端后,系统会提示用户填写密码并解压缩内容

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

unsupported compression method 99
甚至没有提示输入密码,这与我在这里看到的不断扩大的zip问题无关。看起来这个zip与在另一台Mac机器上创建的受密码保护的zip有些不同

这与加密方法EM_AES_256有关,该方法由WinZip引入,但其他人未使用

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引入了自己的AES-256加密”-维基百科

有关解压缩问题的相关帖子: