需要帮助获取此自动下载标头以显示正确的路径

时间:2010-08-23 06:10:15

标签: php include header path

我有一个可以从播放器播放的mp3页面,还有下载歌曲的链接。当用户点击下载链接时,需要打开下载对话框而不是打开媒体播放器,因此建议我使用此标题脚本:

包括/自动的download.php:

<?php
$path = $_GET['path'];
header('Content-Disposition: attachment; filename=' . basename($path));
readfile($path);
?>

然后在我的主页上,链接如下所示:

<a href="includes/auto_download.php?path=Media/Audio/Date/song.mp3">Song Name</a>

我似乎对我的路径做错了,因为当我点击链接时,下载框打开,我可以下载一个名称正确的文件,但它不包含任何信息。

详细说明我的文件结构,我有这个:

/赞助人(我的主要index.php页面是我的链接

/ Patrons / includes(我的auto-download.php脚本所在的位置)

/赞助人/媒体/音频/日期/(这是所有歌曲的所在地)

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

将HTML代码更改为:

 <a href="includes/auto_download.php?path=../Media/Audio/Date/song.mp3">Song Name</a>

或者将PHP代码更改为:

 readfile('../'.$path);

答案 1 :(得分:0)

$ path需要是来自Web根目录的文件的相对路径。没有领先的斜线。如果文件位于Web根目录之外,则应使用完整路径(/home/webuser/song_files/song.mp3)。

例如$path = 'song_files/'. $_GET['name_of_the_file'];

您还应该检查文件是否不存在并退出并显示错误。  这是我在codeigniter中做的一个例子。

function _begin_download($document_data) {
    basepath = 'uploads/';
    $filepath = basepath . $document_data->filename;
    if (file_exists($filepath)) {
        header("Content-type: " . $document_data->mimetype);
        header("Content-length: " . filesize($filepath));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-disposition: attachment; filename="' . $document_data->filename . '"');
        readfile($filepath);
        exit();
    } else {
        exit('File not found.');
    }
}