В php 7.2.0 я создаю zip-файл, который защищен паролем и зашифрован для каждого файла, как предложено в php-документах.
Эта функция работает хорошо и после того, как zip-файл загружается на клиент в windows, пользовательбудет предложено ввести пароль и содержимое будет разархивировано.
На компьютере с OS X после двойного щелчка по файлу появится сообщение об ошибке, при открытии в терминале появляется более четкая ошибка:
unsupported compression method 99
Даже не запрашивая пароль, это не связано с постоянно растущей проблемой почтового индекса, которую я видел здесь.Кажется, что этот zip-файл чем-то отличается от защищенного паролем zip-файла, созданного на другом компьютере Mac.
Это как-то связано с методом шифрования 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 , который использует проприетарное шифрование.«WinZip представил собственное шифрование AES-256» - Википедия
Связанный пост о проблемах распаковки: superuser