强制MP3链接下载而不是流,但保留HTML5音频



因此,强制下载MP3而不是在浏览器中播放的方法显然是将MIME类型设置为文件和/或在.htaccess.中设置Content-Disposition响应标头

这两种方法之间的区别是什么?是使用其中一种还是另一种,或者两者都使用更好?

此外,当使用MP3文件作为源时,这样做会破坏HTML5对<audio>标记的处理吗?

1。正确使用标题这是一个非常普遍的问题,不幸的是,即使是PHP手册也充满了错误。开发人员通常会说"这对我有用",他们会复制他们不完全理解的东西。首先,我注意到使用了标题,如内容描述和内容传输编码。HTTP中没有这样的东西。不相信我?看看RFC2616,它们特别指出"HTTP与MIME不同,不使用内容传输编码,而是使用传输编码和内容编码"。如果你愿意,你可以添加这些头,但它们绝对没有做任何事情。遗憾的是,这个错误的例子甚至出现在PHP手册中。其次,关于MIME类型,我经常看到像ContentType:application/force-download这样的内容。没有这样的东西,内容类型:application/octet流(RFC1521)也可以正常工作(如果是exe/dll,则可能是application/x-msdownload)。如果你正在考虑使用Internet Explorer,最好明确指定它,而不是强迫它"嗅探"内容。有关详细信息,请参阅Internet Explorer中的MIME类型检测。

更糟糕的是,我看到了以下几种说法:

标题("内容类型:应用程序/强制下载");

header("内容类型:应用程序/八位字节流");

标题("内容类型:应用程序/下载");

作者一定很沮丧,添加了三个Content-Type标题。唯一的问题是,正如header()手动条目中所指定的,"可选的替换参数指示标头是否应该替换以前类似的标头,或者添加相同类型的第二个标头。默认情况下,它将替换"。因此,除非指定标头("内容类型:某个值",FALSE),否则新的内容类型标头将替换旧的标头。

2.强制下载和Internet Explorer错误不用担心旧版本的Internet Explorer是什么感觉?一个更美好的世界,这是肯定的。

要强制下载文件,正确的方法是:

header("内容处置:附件;filename=\"$file_name\");

注意:文件名中的引号是必需的,以防文件中可能包含空格。除非添加以下内容,否则上面的代码将在IE6中失败:

标题("Pragma:public");

header("缓存控制:必须重新验证,后检查=0,前检查=0");

现在,根据微软的说法,在这种情况下,缓存控制的使用是错误的,尤其是两个值都设置为零,但它在IE6和IE7中都有效,后来忽略了它,所以没有造成任何伤害。如果您在下载时仍然得到奇怪的结果(尤其是在IE中),请确保禁用PHP输出压缩以及任何服务器压缩(有时服务器会无意中对PHP脚本产生的输出进行压缩)。

看看这个,

.mp3音频/mpeg3

.mp3音频/x-mmpeg-3

.mp3视频/mpeg

.mp3视频/x-mpeg

有关详细信息,请参阅此链接。

正在使用内容处置:附件。。。强制显示一个下载框,而不必右键单击->将目标保存为.

最新更新