2011-11-03 102 views
0

有没有办法强制指定任何给定的文件,而不给它的标题?我拥有的是少数不同的文档和其他文件类型,客户希望根据请求提供下载,但是他们希望尽可能掩盖文件路径。不幸的是,我不知道这些文件中的大多数是什么类型的文件,他们想要一些动态的功能。这件作品我没有得到报酬。所以我正在寻找快速和肮脏的,如果可能的话。有些东西不会迫使我想出每种文件类型的可能逻辑,只有这样我才可以为有问题的文件类型构建标题,以便它可以正确下载。PHP强制文件下载不使用标题

有没有办法实现这一目标?

+1

您的要求是相互排斥的。 –

+1

我认为这可以通过.htaccess完成。不完全确定你在问什么。 – OptimusCrime

+0

我想通常我想要做的就是让一个文件叫它downloads.php,然后我从数据库(主要是服务器上的文件路径)中提取数据的任何文件,无论是txt,doc,pdf,jpg,什么任何东西和所有东西都和文件类型一样。我所需要的是,即使浏览器在默认情况下在查看窗格中打开某些内容,也会触发文件下载,无论文件类型如何。 – chris

回答

2

那么,如果我处理你的问题,你想要一个简单的方法来使用PHP脚本下载任何类型的文件。

首先,你有几种方法可以做到这一点...

最不安全的一个: - 你有一个目录(可以说“文件/”),其中的所有文件都存储。您创建一个接收参数(文件名)的脚本,然后在该目录中查找该文件。这是不安全的,因为任何人都可以尝试下载任何文件,并访问只传递“../”作为参数的子目录。你必须在那里做一些解析。

其他选项是使用数据库,您存储文件名并将它们关联到一个唯一的ID,稍后您将有如下脚本:download.php?id = 1并下载DB ID为1的文件。是我认为最好的。

无论如何,你可以选择任何你认为是最好的,代码强制下载对话框应该是这样的:

$file = "my_file.zip"; // this is what you will get from a param (i.e. ?file=my_file.zip) or from DB query 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); // this is totally needed 
header("Content-Length: ".filesize($file)); 
header("Content-Type: application/force-download"); 
header("Content-Transfer-Encoding: binary"); 
readfile($file); 

这应该做的伎俩。

祝你好运!