说明 | 通过读取部分文件内容自动猜测文件的MIME类型 |
---|---|
状态 | 扩展(E) |
模块名 | mime_magic_module |
源文件 | mod_mime_magic.c |
本模块采取Unix系统下file(1)
命令相同的方法:检查文件开始的几个字节,来判定文件的MIME类型。它被作为当mod_mime
无法解析时,用来处理的"第二道防线"。
本模块源自于Unix系统命令file(1)
的一个自由版本,它通过对来自文件的内容使用"Magic数字"和其它一些线索来判定这个文件的具体内容是什么。本模块只有当"Magic文件"在MimeMagicFile
指令中指定时才有效。
Magic文件的内容是由4-5列的纯文本组成的。文件中允许包含空行,但会被忽略。注释行使用井号(#
)来引导。剩余的行按下面列被分解:
列 | 描述 | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 开始检查的起始字节,">"表示基于前面的非">"行。 | ||||||||||||||||||||||
2 | 匹配的数据类型
| ||||||||||||||||||||||
3 | 匹配的数据内容 | ||||||||||||||||||||||
4 | 如果匹配文件的MIME类型 | ||||||||||||||||||||||
5 | 如果匹配文件的MIME编码方式(可选) |
例如,下面的Magic文件行可以认出一些音频格式:
# Sun/NeXT audio data 0 string .snd >12 belong 1 audio/basic >12 belong 2 audio/basic >12 belong 3 audio/basic >12 belong 4 audio/basic >12 belong 5 audio/basic >12 belong 6 audio/basic >12 belong 7 audio/basic >12 belong 23 audio/x-adpcm
还有下面的示例可以区分带*.doc
扩展名的文件到底是Microsoft Word文档还是Frame Maker文档(两种有相同后缀名但不兼容文件格式)。
# Frame 0 string \<MakerFile application/x-frame 0 string \<MIFFile application/x-frame 0 string \<MakerDictionary application/x-frame 0 string \<MakerScreenFon application/x-frame 0 string \<MML application/x-frame 0 string \<Book application/x-frame 0 string \<Maker application/x-frame # MS-Word 0 string \376\067\0\043 application/msword 0 string \320\317\021\340\241\261 application/msword 0 string \333\245-\0\0\0 application/msword
一个可选的MIME编码方式可以包含在第五列上。例如下面的行可以认出gzip压缩文件并设定他们的编码方式。
# gzip (GNU zip, not to be confused with # [Info-ZIP/PKWARE] zip archiver) 0 string \037\213 application/octet-stream x-gzip
并不是每个系统都适用本模块的。如果你的系统吞吐量已经接近极限,或者你在进行web服务器的基准测试,你可能不希望启动这个模块,因为它的处理会显著影响服务器的性能。
然而,已经有人在努力改进最初的file(1)
代码,使它能更适合在一个非常繁忙的web服务器上工作。这主要是用在那种有数千用户自己发布文档的web服务器上。这在互联网上可能是非常常见的情况。很多情况下,如果服务器能就文件的内容作出比用文件名来区别的方式更加智能化的判断是非常有用的。甚至在当用户没有合理地命名他们的文件的情况下,它也可以用来减少那些诸如:"为什么我的页面不工作啊"之类的报怨。你必须自己决定这额外的开销是否适用于你的环境。
下面关于mod_mime_magic
的记录包含在这里,是按照最初捐助者的版权限制和为了得到他们的承认。
mod_mime_magic: 通过文件的Magic Number查找文件的MIME类型
Copyright (c) 1996-1997 Cisco Systems, Inc.
本软件由Cisco系统有限公司于1997年7月提交给Apache组织。本软件源代码的进一步修订及新版本的派生必须承认Cisco系统有限公司是本模块的原始捐助者。所有其它许可与使用条件都属于Apache组织。
本模块的部分源代码派生于最初发布在comp.sources.unix上的file命令的自由版本。根据要求,下面包含了那个程序的版权信息。
- Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
本软件不隶属于美国电话电报公司(AT&T)或者加利福尼亚大学董事会的任何许可。
在遵循以下限制的基础上,任何人被授权免费地在任何计算机系统上为任何目的使用、修改与重新分发这个软件:
为了符合MrDarwin的条款:这是从自由的"file"命令而来并经过了明显的修改的版本。
说明 | 使用特定的Magic文件激活根据文件内容确定文件MIME类型的功能 |
---|---|
语法 | MimeMagicFile file-path |
作用域 | server config, virtual host |
状态 | 扩展(E) |
模块 | mod_mime_magic |
MimeMagicFile
指令用来激活本模块,默认的Magic文件保存在conf/magic
中。相对路径是相对于ServerRoot
的。虚拟主机会使用与主服务器相同的配置文件,除非使用了更特别的设定。在后者情况下,这些特别的设定会覆盖主服务的设定。
MimeMagicFile conf/magic