Попробуйте сделать 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 () не может использовать) И где в коде это должно быть?
Спасибо.
Теперь это будущее, и теперь вы можете это сделать: (функция 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 ;)";
}
?>
Если вы используете PHP 5.6, вы можете использовать ZipArchive :: SetPassword добавить пароль в текущий активный архив.
Вы бы использовали это так:
$zip->setPassword("YourPasswordHere");
Я бы добавил это раньше $zip->close();