Как поставить пароль на zip архив через php?
Только через консоль.
Ну по крайней мере я не знаю другого способа на PHP.system('zip -P pass file.zip file.txt');
Где:
pass - пароль
file.zip - имя архива (который будет создан)
file.txt - файл который будет добавлен в архив
Начиная с  версии PHP 7.2, пароль можно установить

$zip = new ZipArchive;
$res = $zip->open('filename.zip', ZipArchive::CREATE); //Добавьте имя файла
if ($res === TRUE) {
   $zip->addFromString('ИМЯ_ФАЙЛА_С_РАСШИРЕНИЕМ', 'содержимое файла идет сюда'); //Добавьте имя файла
   $zip->setEncryptionName('ИМЯ_ФАЙЛА_С_РАСШИРЕНИЕМ', ZipArchive::EM_AES_256, 'ПАРОЛЬ'); //Динамическое добавление имени файла и пароля
   $zip->close();
   echo 'Все хорошо';
} else {
   echo 'Ошибка';
}