2011-08-25 115 views
0

我試圖強制下載MP3文件。 的htm文件,我鏈接到的download.php文件有:的download.php試圖用PHP強制下載mp3文件,但它試圖下載php文件而不是

$filename = $_GET['file'] 
header("Content-Length: " . filesize($filename)); 
header('Content-Type: audio/mp3'); 
header('Content-Disposition: attachment; filename=audiofile.mp3'); 
readfile($filename); 

<a href="download.php?file=someaudiofile.mp3">LINK</a> 

內容,但最終的結果,在所有3個主要的瀏覽器是,你想下載'download.php'?

它試圖下載的PHP文件,而不是MP3 ....我沒有明白。

任何想法?

在此先感謝。


對不起,我應該補充說,我只是暗示它。它在網站上的代碼中。另外,分號也在現場版本中,我的錯在這裏不加。它已經很晚了,我很煩,因爲它不工作:)。

它只需要下載單個文件,所以我會拋出一個安全漏洞,確保它匹配確切的文件名或停止執行。

我只是不明白爲什麼腳本試圖下載PHP文件,而不是Mp3請求。

+0

製作URL如下:'/ download.php/someaudiofile.mp3' - 問題解決了。 –

回答

3

您需要將您的PHP代碼包裝在<?php ... ?>中,否則將其視爲HTML。

被警告說你的腳本有很大的安全漏洞。人們可以指定一個文件名,看起來在你的下載目錄之外,並在系統上下載任何文件。如果你不需要文件夾,阻止這種情況的最簡單的方法是禁止文件名中的斜槓和反斜槓。例如,您可以在定義$filename後添加此項。

if (strstr($filename), "/") || strstr($filename), "\\") { 
    die(); 
} 

您的代碼還包含一個語法錯誤:你忘了,包括你的第一行後分號(;)。

+1

也許應該告訴傢伙在他的第一行末尾添加一個分號,並理智地檢查來自'GET'的數據,以便有人不能下載任何他們想要或更糟的PHP文件.. ../'脫離web根目錄。 – Paulpro