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