我有一个htaccess密码保护文件夹中有几个文件。用户不允许访问所有文件,但可以自行下载。复制并下载htaccess保护文件夹中的文件
由于我不能直接链接文件,并且由于复制/删除不是真正的解决方案,我以为我只是使用file_get_contents打开文件并使用正确的标题将其回显到页面中。但..我不明白它的工作..这是我的代码。我得到的错误是,当打开文件时,我得到一个来自Acrobat的“文件已损坏”错误。
<?php
$file = "cms/docs/5641-1.pdf";
header('Content-Description: File Transfer');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename='.basename("exoticfilename.pdf"));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
if (file_exists($file))
{
echo file_get_contents($file);
}
?>
此外,在这个例子中,我只是使用PDF文件,但有几种类型的文件。因此,我应该根据文件类型更改标题。有没有解决方案,或者我应该只用一个非常长的if/else语句?
如果还有另一种更好的方法,我乐于接受。
UPDATE
上述工作,但不是所有的文件。较旧的PDF(Acrobat 6)不起作用,但Acrobat X文件可以。对于docx文件同样重要。有些工作,其他工作则没有。非常奇怪,因为我可以直接在我的电脑上打开所有文件。我认为它与application/pdf行(或docx的application/vnd.openxmlformats-officedocument.wordprocessingml.document)有关。所有其他人,如图像,工作。
我复制了你的代码,它对我很好。尝试在'file_get_contents'后添加'die()' – Narek 2012-01-31 09:02:17
谢谢Narek。我尝试死(),但没有奏效。我只是用一个较旧的PDF测试它,并且工作。这可能是文件头部有问题吗?是否有可能用于不同PDF,DocX,Tiffs等的某种“通用”标题?我的意思是在这行标题('Content-type:application/pdf'); – mat 2012-01-31 09:10:51
@mat,我明白了你的观点,我会删除以前的评论,因为它们似乎不合适。 – Jacco 2012-01-31 09:50:57