Php标题为.wav文件下载但无法在嵌入中播放

Ben*_*oit 5 php wav

我必须为.wav文件构建标题,以便它在元素中播放.

$filename =  basename($_GET['file']);

$pos = strrpos($file, '.');

$extension = ($pos !== false) ? substr($file, $pos) : '';

$mime_type = "";
switch ($extension) {
    case '.mp3':
        $mime_type = "audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3";
        break;
    case '.ulaw':
        $mime_type = "audio/basic";
        break;
    case '.gsm':
        $mime_type = "audio/x-gsm";
        break;
    case '.wav':
        $mime_type = "audio/x-wav, audio/wav";
        break;
}

if(file_exists($filename)){
    $handle = fopen($filename, "rb");

    header('Content-Description: File Transfer');
    header("Content-Transfer-Encoding: binary"); 
    header('Content-Type: '.$mime_type);
    header('Content-length: ' . filesize($filename));
    header('Content-Disposition: attachment;filename="' . $filename.'"');

    while (!feof($handle)) {
        echo fread($handle, 4096);
        flush();
    }
    fclose($handle);
}else{
    header("HTTP/1.0 404 Not Found");
}
Run Code Online (Sandbox Code Playgroud)

这被称为 www.example.com/listen?file=Test.en.wav

现在,当我进入该页面时,文件下载并运行(我想要的一半),但是当我尝试时:

<embed src="www.example.com/listen?file=Test.en.wav">
Run Code Online (Sandbox Code Playgroud)

播放器出现,但文件没有/无法播放.

编辑:我想知道是否有可能让它发挥作用以及如何进行?

Abs*_*ERØ 0

尝试audio/vnd.wave

根据RFC 2361

还可以尝试为每个请求仅指定一个 MIME 类型,而不是逗号分隔的列表。

case '.mp3':
    $mime_type = "audio/mpeg";
Run Code Online (Sandbox Code Playgroud)

您可能还需要安装Quicktime等软件才能直接在浏览器中播放这些内容。某些浏览器确实会尝试内容 [MIME] 嗅探来修复错误的 MIME 类型。