2012-06-09 36 views
1

我想製作一個腳本,讓我可以下載我的網站根目錄以外的文件並列出文件...它列出了目錄的文件,但它不允許我下載它們因爲當他們點擊它只是去了website.com/clickedlink.jpg,但它需要一些如何改變,去我想要的位置...外部目錄列表和下載

我想我解釋這有點奇怪,所以請告訴我是否需要澄清。

我需要從下載的/ home /文件/ I /需要的文件,但該網站被保存在/ var /網站/

所以,如果有人可以請大家幫幫忙,我會100%的感謝!

<html><head><title>Root page</title></head><body> 


<? 
// open this directory 
$myDirectory = opendir("/home/files/I/need"); 

// get each entry 
while($entryName = readdir($myDirectory)) { 
    $dirArray[] = $entryName; 
} 

// close directory 
closedir($myDirectory); 

// count elements in array 
$indexCount = count($dirArray); 
Print ("$indexCount files<br>\n"); 

// sort 'em 
sort($dirArray); 

// print 'em 
print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n"); 
print("<TR><TH>Filename</TH><th>Filetype</th><th>Filesize</th></TR>\n"); 
// loop through the array of files and print them all 
for($index=0; $index < $indexCount; $index++) { 
     if (substr("$dirArray[$index]", 0, 1) != "."){ // don't list hidden files 
     print("<TR><TD><a href=\"$dirArray[$index]\">$dirArray[$index]</a></td>"); 
     print("<td>"); 
     print(filetype($dirArray[$index])); 
     print("</td>"); 
     print("<td>"); 
     print(filesize($dirArray[$index])); 
     print("</td>"); 
     print("</TR>\n"); 
    } 
} 
print("</TABLE>\n"); 
?> 
</body></html> 


</body></html> 
+0

您可以創建符號鏈接,文件夾/位置別名或對文件使用絕對路徑。 – rkosegi

+0

我做過類似的嘗試...我認爲我做了它,但它不起作用.... 我在我的webroot中創建了一個名爲downloads的文件夾,並嘗試使用符號鏈接將它連接到另一個文件夾。 。我認爲它的工作原因在我的ftp客戶端,當我點擊web根目錄中的下載文件夾時,它指示我到另一個文件夾,但是當我單擊鏈接下載時,我得到一個未找到的錯誤 – Butterflycode

+0

您需要創建別名 – rkosegi

回答

1

最好的解決方案是讓你的web服務器通過創建一個位置別名來處理這個問題;讓Web服務器爲您執行下載比在PHP中執行此操作更具可擴展性。

但是,既然你問了一個PHP的解決方案,將它添加到您的腳本此之上:

$basePath = "/home/files/I/need"; 
if (isset($_SERVER['PATH_INFO']) && $file = basename($_SERVER['PATH_INFO'])) { 
    if (file_exists("$basePath/$file")) { 
     // add file size 
     header('Content-Length: ' . filesize("$basePath/$file")); 
     // write file to output 
     readfile("$basePath/$file"); 
     return; 
    } 
} 

構造URL進行下載:

/path/to/your/script.php/clickedlink.jpg 

/path/to/your/script.php是生成頁面的相同URL;你追加一個斜槓,連同預期的文件名。

我使用basename()來阻止人們訪問../../../etc/passwd或其他一些他們不應該看到的文件,但這也意味着您不能使用子文件夾。如果您需要支持子文件夾,則必須以不同的方式清理PATH_INFO

+0

I對於我應該怎麼做有點困惑......我將其添加到腳本的頂部並修改了什麼? – Butterflycode

+0

@Butterflycode我發佈的代碼基本上會自動下載下載......您只需在URL後面追加'/ clickedlink.jpg'並且應該可以工作 –

+0

這很好用,一個問題是它不像普通下載,當它開始下載它並沒有說它有多大,它只是繼續下去,直到下載...有沒有辦法解決這個問題? – Butterflycode