PHP文件下载输出文件内容

时间:2016-03-13 19:35:56

标签: php header

我正在编写一些可以加密文件的内容,然后为您提供带有“.ocrypt”扩展名的加密下载。我把一切都搞定了,然后我想我搞砸了,现在文件下载不起作用了。

尝试下载的文件: domain.com/files/ {generated-file-name} .ocrypt

发生了什么:

what's happening

下载代码:

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;
} 

1 个答案:

答案 0 :(得分:0)

我不会直接给你答案,但如果我是你的话,如果告诉我会做什么

首先,我会将更改恢复为最新状态。如果您使用像Zend Studio / PDT或类似的IDE,您可以看到历史记录更改。如果您有源代码管理 - 请将其回滚。

如果失败,请查看您的输出。好像文本内容被发送到浏览器而不是文件。在浏览器中尝试将其保存为带有ocrypt后缀(whatever.ocrypt)的文件。如果你可以在适当的应用程序下载并打开它(抱歉我不熟悉这个),这意味着php发送到浏览器有错误的标题 - 尝试修复它们。

如果您无法下载文件并打开它,那么您需要深入挖掘。逐步检查问题所在。尝试使用不同的浏览器,将不同的文件加密,尽量不加密并按原样发送。