2011-09-15 76 views
4

我想向網站上的授權用戶提供.pdf.doc文件。用戶在登錄時只能看到文件選擇頁面,但這並不妨礙未經授權的用戶在知道完整URL的情況下查看文檔。PHP來保護PDF和DOC

如何防止未經授權的用戶訪問這些文件?

回答

8

的答案很簡單, @喬恩斯特林已經張貼了這個,因爲我打字,但我會解釋一下你

一個把你的文件,你的公共html目錄之外,

例如cPanel設置

user/public_html 
    /public_html/download.php 

user/documents/ 
    /documents/file.doc 
    /documents/file.pdf 

@dhh發佈了一個基本download.php php文件但是因爲你想強制下載他們的東西,你可以做的就像找到並提供正確的MIME類型這裏是對他的代碼的擴展,以1強制下載文件的最佳方式,2允許不同的文件類型

的download.php

//check users is loged in and valid for download if not redirect them out 
// YOU NEED TO ADD CODE HERE FOR THAT CHECK 
// array of support file types for download script and there mimetype 
$mimeTypes = array(
    'doc' => 'application/msword', 
    'pdf' => 'application/pdf', 
); 
// set the file here (best of using a $_GET[]) 
$file = "../documents/file.doc"; 

// gets the extension of the file to be loaded for searching array above 
$ext = explode('.', $file); 
$ext = end($ext); 

// gets the file name to send to the browser to force download of file 
$fileName = explode("/", $file); 
$fileName = end($fileName); 

// opens the file for reading and sends headers to browser 
$fp = fopen($file,"r") ; 
header("Content-Type: ".$mimeTypes[$ext]); 
header('Content-Disposition: attachment; filename="'.$fileName.'"'); 

// reads file and send the raw code to browser  
while (! feof($fp)) { 
    $buff = fread($fp,4096); 
    echo $buff; 
} 
// closes file after whe have finished reading it 
fclose($fp); 

PS這裏是MIME類型的abig列表,如果你想添加其他文件 http://www.hansenb.pdx.edu/DMKB/dict/tutorials/mime_typ.php

+1

這正是我正在尋找的,謝謝! – Mike

3

你可以做的是提供相當於文件的PHP代理。

將文件放在webroot之外,然後編寫一個腳本來檢查用戶是否被允許訪問。如果不是,則重定向它們,如果它們是,則設置適當的標題並輸出文件數據。

3

您應該將所有下載內容存儲在公共/用戶可訪問的doc根目錄(當然是在您的basedir內),並添加下載腳本以在用戶授權時發送下載。

這裏有一些如何「發送」文件下載的例子。

$file = "ireland.jpg"; 
$fp = fopen($file,"r") ; 
header("Content-Type: image/jpeg"); 

while (! feof($fp)) { 
    $buff = fread($fp,4096); 
    print $buff; 
} 
1

這爲我做這份工作的支持:我置於。 pdf和一個.htaccess文件降低它在我的apache web服務器上的普通文件夾中的代碼(我將它命名爲「docs」)。

Order Deny,Allow 
Deny from all 
Allow from 127.0.0.1 

<Files /index.php> 
    Order Allow,Deny 
    Allow from all 
</Files> 

然後,我把代碼從馬丁巴克回答以上,改變了文件路徑爲「文檔/ sample.pdf」,並將其粘貼到我的根目錄下的PHP文件。而已。您現在無法訪問每個網址的文件,但是如果您運行test.php,則可以下載它。

+2

如果您不支持網絡服務器E.G的用戶目錄,您只能訪問public_html目錄,而不是上面的目錄,因爲某些免費主機提供了這個功能 –