PHP - 强制下载MP3文件

时间:2016-05-29 17:27:28

标签: php download header readfile

所以,我需要一点帮助。我有一个托管一些mp3的网站。当用户点击下载URL时,它直接链接到一个名为downloadmp3.php的文件,该文件在url中有2个参数...下面包含了php文件,它基本上应该强制用户保存mp3。 (不要在浏览器中播放或任何东西)。

那不会发生。相反,似乎该文件在ascii中写入浏览器。好像这是写出来的实际mp3文件。

这是我的downloadmp3.php文件...请问,这段代码有什么问题。 它适用于我当地的LAMP(Windows上的Bitnami Wampstack)....也就是说,在我的本地测试环境中,它将文件发送到我的broswer,我可以保存它。当我将它上传到真实服务器时,它基本上写出了mp3文件。

这是罪魁祸首文件,downloadmp3.php ...请帮忙

<?php
include 'ngp.php';
$file = $_GET['songurl'];
$songid = $_GET['songid'];
increasedownloadcount($songid);
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: audio/mpeg');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

顺便说一句,这个网站只托管mp3 - 没有其他音频或文件格式。因此,这个downloadmp3.php脚本应该理想地询问用户他们想要保存这个文件的位置。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我认为offsetTop应该在引号中:

offsetHeight

答案 1 :(得分:0)

将内容类型值更改为text / plain。使用此浏览器不会识别它并且不会播放该文件。相反,它将在客户机上下载文件。

答案 2 :(得分:0)

似乎标题太多了。我相信他们会做某些事情......但是这段代码可以运作。

此代码适用于MP3文件....下载到文件。玩没有问题。

if(isset($_GET['file'])){
    $file = $_GET['file'];
    header('Content-type: audio/mpeg');
    header('Content-Disposition: attachment; filename=".$file.'"');
    readfile('path/to/your/'.$file);
    exit();
}

您可以使用ajax调用或以下方式访问它:
<a id="dl_link" href="download.php?file=<>file-you-wish-to-download<>" target="_blank">Download this file</a>
希望这有一些用处