PHP Создать Zip на лету с паролем

Попробуйте сделать Zip файл с паролем на лету

<?php
$fileRequest = 'cooking-book';

// Prepare File
$file = tempnam("tmp", "zip");
$zip = new ZipArchive();
$zip->open($file, ZipArchive::OVERWRITE);

// Stuff with content
$getFile = file_get_contents('http://otherserver.com/getfile.php?sq='.$fileRequest);
$zip->addFromString('cooking-book.txt', $getFile);

// Close and send to users
$zip->close();
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$fileRequest.'.zip"');
readfile($file);
unlink($file);
?>

Теперь все работает нормально (загрузите файл с другого сервера в память, заархивируйте его и отправьте пользователю).

Как установить пароль на zip? (exec () shell_exec () не может использовать) И где в коде это должно быть?

Спасибо.

0

Решение

Теперь это будущее, и теперь вы можете это сделать: (функция PHP7.x)

ZipArchive :: setEncryptionName — устанавливает метод шифрования записи, определяемой ее именем
http://php.net/manual/de/ziparchive.setencryptionname.php

<?php
$fileRequest = 'cooking-book';
$passwort = 'PW';

// Prepare File
$file = tempnam("tmp", "zip");
$zip = new ZipArchive();

if ($zip->open($file, ZipArchive::OVERWRITE) === TRUE) {
// Stuff with content
$getFile = file_get_contents('http://otherserver.com/getfile.php?sq='.$fileRequest);
$zip->addFromString('cooking-book.txt', $getFile);
$zip->setEncryptionName('cooking-book.txt', ZipArchive::EM_AES_256, $passwort);
// Close and send to users
$zip->close();
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$fileRequest.'.zip"');
readfile($file);
unlink($file);
} else {
echo "Error ;)";
}
?>
1

Другие решения

Если вы используете PHP 5.6, вы можете использовать ZipArchive :: SetPassword добавить пароль в текущий активный архив.

Вы бы использовали это так:

$zip->setPassword("YourPasswordHere");

Я бы добавил это раньше $zip->close();

-4

По вопросам рекламы [email protected]