因此,显然强制 MP3 下载而不是在浏览器中播放的方法是将 MIME 类型设置为文件和/或在 .htaccess 中设置 Content-Disposition 响应标头。
这两种方法有什么区别,使用其中一种或两种方法更好吗?
<audio>
此外,当使用 MP3 文件作为源时,是否会破坏 HTML5 对标签的处理?
因此,显然强制 MP3 下载而不是在浏览器中播放的方法是将 MIME 类型设置为文件和/或在 .htaccess 中设置 Content-Disposition 响应标头。
这两种方法有什么区别,使用其中一种或两种方法更好吗?
<audio>
此外,当使用 MP3 文件作为源时,是否会破坏 HTML5 对标签的处理?
1.正确使用标题 这是一个非常普遍的问题,不幸的是,即使是 PHP 手册也存在错误。开发人员通常会说“这对我有用”,然后他们会复制他们不完全理解的内容。首先,我注意到 Content-Description 和 Content-Transfer-Encoding 等标头的使用。HTTP 中没有这样的东西。不相信我?看看 RFC2616,他们特别声明“HTTP,不像 MIME,不使用 Content-Transfer-Encoding,并且使用 Transfer-Encoding 和 Content-Encoding”。如果需要,您可以添加这些标题,但它们绝对不会做任何事情。可悲的是,这个错误的例子甚至出现在 PHP 手册中。其次,关于 MIME-type,我经常看到 Content-Type: application/force-download 之类的东西。没有这样的东西和内容类型:application/octet-stream (RFC1521) 也可以正常工作(或者如果它是 exe/dll,则可能是 application/x-msdownload)。如果您正在考虑 Internet Explorer,最好清楚地指定它,而不是强迫它“嗅探”内容。有关详细信息,请参阅 Internet Explorer 中的 MIME 类型检测。
更糟糕的是,我看到这样的陈述:
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("内容类型:应用程序/下载");
作者一定是真的很郁闷,加了三个Content-Type header。唯一的问题是,如 header() 手册条目中所述,“可选的替换参数指示该标头是否应该替换先前的类似标头,或者添加第二个相同类型的标头。默认情况下,它将替换“。因此,除非您指定 header("Content-Type: some-value", FALSE),否则新的 Content-Type 标头将替换旧的标头。
2. 强制下载和 Internet Explorer 错误 不用担心旧版本的 Internet Explorer 是什么感觉?一个更美好的世界,这是肯定的。
要强制下载文件,正确的方法是:
header("内容配置:附件;文件名=\"$file_name\"");
注意:文件名中的引号是必需的,以防文件可能包含空格。除非添加以下代码,否则上述代码将在 IE6 中失败:
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
现在,在这种情况下使用 Cache-Control 是错误的,尤其是根据微软的说法,将这两个值都设置为零,但它在 IE6 和 IE7 中有效,后来忽略了它,所以没有伤害。如果您在下载时仍然得到奇怪的结果(尤其是在 IE 中),请确保禁用 PHP 输出压缩以及任何服务器压缩(有时服务器无意中对 PHP 脚本生成的输出应用压缩)。
看这个,
.mp3 音频/mpeg3
.mp3 音频/x-mpeg-3
.mp3 视频/mpeg
.mp3 视频/x-mpeg
有关更多信息,请参阅此链接。
使用 Content-Disposition: attachment... 强制显示下载框,而不必右键单击 -> 将目标另存为。