我正在编写一些可以加密文件的内容,然后为您提供带有“.ocrypt”扩展名的加密下载。我把一切都搞定了,然后我想我搞砸了,现在文件下载不起作用了。
尝试下载的文件: domain.com/files/ {generated-file-name} .ocrypt
发生了什么:
下载代码:
public function CreateDownload($fileName)
{
if (file_exists($fileName)){
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$fileName);
header('Content-Transfer-Encoding: chunked'); //changed to chunked
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
ob_clean();
flush();
readfile($fileName);
exit;
} else {
exit;
}
}
索引代码:
$target_dir = "files/";
$target_file = $target_dir . $cryption->GenerateKey(5).'_'.basename($_FILES["fileToUpload"]["name"]);
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
$crypt = new Crypt();
$encName = 'files/'.$crypt->GenerateKey(10).'.ocrypt';
$encryptedFile = fopen($encName, "w");
fwrite($encryptedFile, base64_encode(basename($_FILES["fileToUpload"]["name"])).'|'.$crypt->encrypt(file_get_contents("https://crypt.domain.com/".$target_file), $_POST["encryptionKey"]));
fclose($encryptedFile);
$crypt->CreateDownload($encName);
}
GenerateKey()(你可能不需要这个,但有人可能会问。)
public function GenerateKey($length)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
答案 0 :(得分:0)
我不会直接给你答案,但如果我是你的话,如果告诉我会做什么
首先,我会将更改恢复为最新状态。如果您使用像Zend Studio / PDT或类似的IDE,您可以看到历史记录更改。如果您有源代码管理 - 请将其回滚。
如果失败,请查看您的输出。好像文本内容被发送到浏览器而不是文件。在浏览器中尝试将其保存为带有ocrypt后缀(whatever.ocrypt)的文件。如果你可以在适当的应用程序下载并打开它(抱歉我不熟悉这个),这意味着php发送到浏览器有错误的标题 - 尝试修复它们。
如果您无法下载文件并打开它,那么您需要深入挖掘。逐步检查问题所在。尝试使用不同的浏览器,将不同的文件加密,尽量不加密并按原样发送。