2012-08-13 50 views
0

我做了一個允許用戶上傳文件(文本文件)的表單。我正在使用由time()和用戶標識(僅限登錄用戶可以上載)組合而成的獨特(?)文件名。使上傳的文件無法訪問php/apache

我的問題是無法從外部訪問文件。也就是說,只有上傳它的用戶或管理員才能看到它,而只需鍵入www.domain.com/uploads/file_name.txt就可以看到它。

我知道我可以阻止訪問文件通過htaccess,但如果我確實瞭解它,那麼即使以管理員身份(或發送文件的用戶)登錄後,我也無法打開它。 我知道我可以通過php在本地打開文件,所以我可以通過我的管理面板顯示內容,但這是一種痛苦,因爲我只能輸出純文本文件而沒有問題。我也無法下載該文件。

在某些情況下,我可以隨時生成pdf或rtf版本,但這將會有很長的路要走,因爲我需要以複雜的方式詳細說明內容。無論如何,我不知道如何處理Word或OpenOffice文件,這可能是最常見的情況,以及如何不放鬆格式或其他可能的功能。

任何想法?

回答

1

爲什麼不顯示的下載鏈接登錄的用戶,像www.domain.com/download.php?file = ...該代碼可能看起來是這樣的:

if(isset($_GET['file']) && user_is_logged_in()) { 
    $file = DIR_SOME_WHERE .'/'. basename($_GET['file']); 
    if(file_exists($file) && user_has_file_access($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
    } 
} 
+0

這正是我想實現,只是不知道如何做到這一點。你的代碼就像一個魅力。非常感謝你! – DavidTonarini 2012-08-14 12:21:42

+0

okey np ...但你應該把這個答案標記爲「接受的答案」 – xCander 2012-08-14 12:43:32

+0

對不起,本網站上新增了,所以我不知道如何。 :D我現在接受了答案 – DavidTonarini 2012-08-17 11:01:03