2012-06-12 83 views
10

我想隱藏下載文件夾的位置,以便當用戶下載文件時他看不到位置。我認爲這可以使用.htaccess文件來完成,但我該怎麼做?或者,這怎麼可以用PHP來完成?如何隱藏實際的下載文件夾位置

+0

不,你不能。這是一個基本的東西,讓用戶做他想要下載的文件。 – yent

+0

我想他是說如何隱藏下載腳本的URL – michael

+0

@yent實際上我只是想隱藏文件存在的用戶的位置 –

回答

24

這是我如何做到這一點在PHP中:

<?php 
$fakeFileName= "fakeFileName.zip"; 
$realFileName = "realFileName.zip"; 

$file = "downloadFolder/".$realFileName; 
$fp = fopen($file, 'rb'); 

header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=$fakeFileName"); 
header("Content-Length: " . filesize($file)); 
fpassthru($fp); 
?> 

此外,如果你不希望任何人訪問該文件的位置,把一個名爲.htaccess文件到您的下載文件夾中,只有內容:

deny from all 

我改了一點代碼。首先當我說假文件名和真實文件名時,假文件名是下載器將文件下載到的名稱,其中真實文件名是服務器上下載文件夾中實際文件的名稱。

此外,我檢查以確保用戶已登錄並能夠下載該文件。如果他選擇下載文件,一個PHP文件是在一個新的標籤(從上面的下載代碼)調用,然後在文件的最後,我也行:

exit; 

所以當他點擊下載鏈接,一個空白頁面迅速在新標籤中彈出,然後快速退出並開始下載。

編輯:下載鏈接看起來是這樣的:

<a href="simpleDown.php?id=<?php echo $_GET['id']; ?>" target="_blank">Download!</a> 

哪裏id是下載數據庫的id,並在下載腳本從上面我發現與id進入,然後得到它的真實文件名和假文件名。你可以在沒有數據庫的情況下這樣做。

+1

'.htaccess' **不** **'.htacess'(至少使用默認設置) – Lix

+0

哦,我的不好,哈哈,固定 – iedoc

+0

@iedoc但是,我該如何更改下載網址的域名。 – Kumar

4

也許你想看看Mod Rewrite,或者使用你的PHP腳本來訪問文件,只需要去file.php?f=someHash,然後用八位字節流來強制用戶下載文件。

+2

+1 - 這將是理想的解決方案。通過PHP腳本傳遞所有下載內容不僅意味着您可以將數據目錄移出公共根目錄,而且還可以將安全檢查置於頂層。理想情況下,不要按文件名引用文件,使用映射到文件的ID,以便可以隨意更改名稱而不會破壞現有鏈接。 – michael

2

您要做的是讓用戶定向到fake_url.php,然後將該URL重寫爲其他文件 - real_url.php。這有效地將real_url.php呈現爲隱藏狀態,因爲用戶不知道您的.htaccess文件中發生的重定向。

RewriteRule fake_url.php(.*)$ real_url.php?$1 [L,QSA] 

在你real_url.php,你可以通讀重定向傳遞的參數,然後使用類似的東西來readFile()real_url.php

從發送相應的文件返回給用戶,以便用戶將只能看到URL -
https://my-secret-site/download.php?file=file_to_download

而在你real_url.php你就會知道被檢查$_GET['file']參數要求的是什麼文件。

用戶正在下載的文件的實際位置已無關緊要。所有下載都通過fake_url.php,只有該腳本需要知道下載文件夾的真實位置。

-1

我認爲,主要部分是「寫入.htaccess」,可以通過簡單的fwrite來完成,但是如果你給用戶,在線閱讀pdf的選擇,這個解決方案將不起作用,因爲在這種情況下,socket需要打開更多的時間(以某種方式,如果你能做到這一點,那麼這可能會危害您的安全!),

<?php 
session_start(); 
$fileLocation = getenv("DOCUMENT_ROOT") . "your_download _folder/.htaccess"; 
$file = fopen($fileLocation,"w"); 
$k="\.(md|htaccess)$"; 
$content = "IndexIgnore * 
Order Deny,Allow 
Deny from All 

AddType application/octet-stream .pdf"; 
fwrite($file,$content); 
fclose($file); 
$p=getenv("DOCUMENT_ROOT") . "your_download _folder/".$_SESSION['x'](file_to_be_downloaded !); 
header("Content-type:application/pdf"); 
header("Content-Disposition:attachment;filename=".$_SESSION['x']); 
readfile($p); 
$fileLocation = getenv("DOCUMENT_ROOT") . "your_download _folder/.htaccess"; 
$file = fopen($fileLocation,"w"); 
$k="\.(md|htaccess)$"; 
$content = "IndexIgnore * 
Order Allow,Deny 
Deny from All 

AddType application/octet-stream .pdf"; 
fwrite($file,$content); 
fclose($file); 
exit; 
?> 

結果:在接下來的窗口(這將在下一時刻被關閉),一文件下載選項將被觸發給用戶。