我有一个可以从播放器播放的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脚本所在的位置)
/赞助人/媒体/音频/日期/(这是所有歌曲的所在地)
非常感谢任何帮助!
答案 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.');
}
}