PHP头内容配置:附件forces.PHP文件或内联

PHP头内容配置:附件forces.PHP文件或内联,php,header,download,cross-browser,mp3,Php,Header,Download,Cross Browser,Mp3,我想从我的站点下载一个.mp3文件,但是当使用这段代码时,它会在Firefox和Safari中强制使用.php。但在chrome中,它将强制文件以内联方式发送,并在页面上播放。我怎样才能让他们真正下载.mp3文件 $track = $_SERVER['QUERY_STRING']; if (file_exists("/home/user/gets/" .$track)) { header("Content-Type: audio/mpeg"); header('Content-

我想从我的站点下载一个.mp3文件,但是当使用这段代码时,它会在Firefox和Safari中强制使用.php。但在chrome中,它将强制文件以内联方式发送,并在页面上播放。我怎样才能让他们真正下载.mp3文件

$track = $_SERVER['QUERY_STRING'];

if (file_exists("/home/user/gets/" .$track)) {
    header("Content-Type: audio/mpeg");
    header('Content-Length: ' . filesize($track));
    header('Content-Disposition: attachment; filename="test.mp3"');
    $str = "/home/user/gets/".$track;
    readfile($str); 
    exit;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
}
我还尝试下载一个.zip文件,并将内容类型更改为application/ocetet stream,但它强制所有浏览器上都有.php文件

//$track = $_SERVER['QUERY_STRING'];
$track = 'testfile.zip';
if (file_exists("/home/user/gets/" .$track)) {
    header("Content-Type: application/octet-stream");
    header('Content-Length: ' . filesize($track));
    header('Content-Disposition: attachment; filename="test.mp3"');
    $str = "/home/user/gets/".$track;
    readfile($str); 
    exit;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
}

尝试从文件名中删除引号:

header('Content-Disposition: attachment; filename=test.mp3');
                                                  ^^^^^

获取脚本的名称而不是试图使用的文件名通常表示文件名包含浏览器试图保存到的文件系统的无效字符。e、 g.
是不允许的。

我认为
文件大小($track)
是错误的,它应该是整个路径
文件大小(“/home/user/gets/”$track)
。这将导致php输出错误消息,阻止您设置内容长度和处置标题。

我认为
文件大小($track)
是错误的,应该是整个路径
文件大小(“/home/user/gets/”$track)
是的,这是MarcB的主要问题。你们都是正确的。谢谢这也是问题的一部分。谢谢