Как не странно, но оказалось, что создать zip архив с паролем, использую нативный php класс ziparchive не так просто.
Думал, что достаточно будет вызвать метод setPassword, а дальше использовать addFile, но нет.Как сделать zip архив с паролем на PHP (ziparchive)
23.04.2023
Итак, готовое решение:
$sIn = 'in.xlsx';
$sOut = 'final.zip';
$oZip = new ZipArchive();
$oZip->open($sOut, ZIPARCHIVE::CREATE);
$oZip->setPassword('PASS');
$oZip->addFromString($sIn, file_get_contents($sIn));
$oZip->setEncryptionName($sIn, ZipArchive::EM_AES_256);
$oZip->close();
Т.е. нужно однократно вызвать setPassword, а потом, для каждого файла addFromString и setEncryptionName.
Но на которых хостингах и этот вариант не работает, тогда остаться только:
$sIn = 'in.xlsx';
$sOut = 'final.zip';
echo system('zip -P pass '.$sOut . ' ' . $sIn);