2011-08-25 113 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