我有一個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