Как сделать zip архив с паролем на PHP (ziparchive)

23.04.2023

Как не странно, но оказалось, что создать zip архив с паролем, использую нативный php класс ziparchive не так просто.

Думал, что достаточно будет вызвать метод setPassword, а дальше использовать addFile, но нет.
Итак, готовое решение:

 
$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);


Категории: PHP
Пометки: ziparchive php password, addfromstring setencryptionname setPassword php не работает
Яндекс.Метрика