Итак, у меня есть небольшое тестовое приложение, в которое пользователь может загрузить файл (docx, png, jpg и несколько других). Файл зашифрован и сохранен в папке. Запись в таблице БД создается с UID пользователя и именем файла, например,
AA1234 Image100.jpg
BB2345 WorkDoc.Doc
Это прекрасно работает, файл зашифрован и сохранен, а таблица содержит информацию.
Кому скачав сохраненный зашифрованный файл, пользователю предоставляется выбор / опция из списка файлов, применимых к ним (например, Image100.jpg, AA1234). После отправки инструмент должен затем загрузить файл, расшифровать его и открыть окно, чтобы позволить пользователю ОТКРЫТЬ / СОХРАНИТЬ файл
Моя проблема в том, что, хотя это работает, это не так аккуратно, как хотелось бы , Код загружает файл, расшифровывает его, сохраняет его как расшифрованный временный файл , а затем предлагает пользователю окно ОТКРЫТЬ / СОХРАНИТЬ на основе этого временного сохраненного файла, как показано ниже. (затем удаляет этот временный, дешифрованный файл после).
include('./lib/key.php');
//Get the filename and prepend the folder where the encrypted files are saved
$file = ('encuploads/'.$_POST["fileToDownload"]);
//Read the file and convert it to a string variable
$DocumentString = file_get_contents($file);
//Decrypt the file
$decryption=openssl_decrypt ($DocumentString, $ciphering, $key, $options, $iv);
//Create a new temporary file containing the decrypted info
$decrypt = 'decrypted'.basename($_POST["fileToDownload"]);
$downloadfile = 'encuploads/'.$decrypt;
file_put_contents($downloadfile, $decryption);
//change the headers to output to a "download/save" window for the user
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header("Content-Disposition: attachment; filename=\"" . ($_POST["fileToDownload"]) . "\";");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($downloadfile));
ob_clean();
flush();
readfile($downloadfile); //showing the path to the server where the file is to be download
//delete the temporary file.
unlink(realpath($downloadfile))
Поэтому вместо сохранения временного дешифрованного файла - "file_put_contents($downloadfile, $decryption);"
и последующего чтения с установленными заголовками "readfile($downloadfile);"
Я хотел бы получить возможность использовать прямую переменную $ decryption после операторов заголовка
, таких как echo $decryption
с заголовками, установленными таким образом, чтобы предоставить пользователю те же параметры OPEN / SAVE (для выбранного типа файла)
Любая идея, если это допустимая опция или любой другой аккуратный способ дать пользователю возможность загрузки после дешифрования (я не хочу вариант <a href="decryptedfilehere">DOWNLOAD</a>
... Я хотел бы всплывающее окно)
Спасибо